Apabila membandingkan prestasi bacaan baris daripada input standard menggunakan C dan Python, anda boleh terkejut apabila mendapati bahawa kod C cenderung berjalan jauh lebih perlahan daripada rakan Pythonnya. Ini boleh dikaitkan dengan perbezaan asas dalam tetapan input/output (I/O) lalai dalam dua bahasa.
Secara lalai, aliran input C cin disegerakkan dengan sistem I/O (stdio) standard. Ini bermakna cin mengelakkan sebarang penimbalan input dan membaca aksara data mengikut aksara mengikut keperluan. Walaupun pendekatan ini menghalang isu yang berpotensi apabila mencampurkan strim C I/O dengan fungsi stdio, pendekatan ini akan dikenakan penalti prestasi, terutamanya apabila membaca sejumlah besar data.
Sebaliknya, Python menggunakan input buffer secara lalai. Apabila membaca daripada input standard dalam Python, jurubahasa membaca input dalam ketulan yang lebih besar, mengurangkan bilangan panggilan sistem yang diperlukan. Penimbalan meningkatkan prestasi dengan meminimumkan overhed yang dikaitkan dengan panggilan sistem dan boleh mempercepatkan pemprosesan input dengan ketara.
Untuk mencapai prestasi serupa dengan Python dalam C , anda boleh melumpuhkan penyegerakan secara eksplisit. antara cin dan stdio dengan menggunakan kaedah ios_base::sync_with_stdio(false). Ini membolehkan cin menimbal input secara bebas, yang membawa kepada prestasi yang lebih baik.
Daripada menggunakan getline(cin, input_line), pertimbangkan untuk menggunakan fgets(input_line, sizeof(input_line) , stdin) secara langsung. fgets ialah fungsi C yang membaca baris input daripada aliran dan menyimpannya dalam tatasusunan aksara. Dengan mengelakkan aliran cin, anda boleh mengurangkan lagi overhed dan berpotensi meningkatkan prestasi.
Jadual yang disediakan meringkaskan kelajuan bacaan baris bagi pendekatan berbeza dalam C dan Python:
Implementation | Lines per Second |
---|---|
Python (default) | 3,571,428 |
cin (default/naive) | 819,672 |
cin (no sync) | 12,500,000 |
fgets | 14,285,714 |
wc (not fair comparison) | 54,644,808 |
Seperti yang terbukti daripada keputusan, pelaksanaan C lalai berprestasi jauh lebih perlahan daripada Python. Walau bagaimanapun, dengan melumpuhkan penyegerakan strim atau menggunakan fgets secara langsung, anda boleh mencapai prestasi yang setanding atau lebih baik dalam C .
Atas ialah kandungan terperinci Mengapa Pembacaan C Line Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Dioptimumkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!