Rumah >pembangunan bahagian belakang >C++ >Mengapa Bacaan Input Standard C Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?
Mengapa C Standard Input Reading Jatuh Terhadap Kecekapan Python
Sambil membandingkan prestasi Python dan C dalam membaca baris input rentetan daripada standard input (stdin), perbezaan yang ketara muncul: Kod C berjalan dengan ketara lebih perlahan. Ini mendorong penyiasatan tentang sebab asas bagi jurang prestasi ini.
Isu ini berpunca daripada tetapan lalai C . Secara lalai, istreams, seperti cin, menyegerakkan dengan stdio, mengakibatkan pengelakan penimbalan input. Untuk mengoptimumkan prestasi, penyegerakan ini boleh dilumpuhkan menggunakan pernyataan std::ios_base::sync_with_stdio(false). Pelarasan ini mengurangkan kekangan prestasi utama.
Strim input standard beroperasi secara berbeza mengikut reka bentuk antara Python dan C . Python biasanya ditimbal, manakala C tidak ditimbal secara lalai. Dalam keadaan biasa, penimbalan mengurangkan panggilan sistem, meningkatkan kecekapan. Walau bagaimanapun, pelaksanaan dan penimbal berasingan bagi stdio dan iostream berasaskan FILE* dalam C menimbulkan isu yang berpotensi apabila digunakan bersama.
Untuk mengelakkan ketidakkonsistenan penimbal dan hasil yang tidak dijangka, C menyegerakkan strim dengan stdio secara lalai. Walaupun ini melindungi daripada kemungkinan masalah, ia memperkenalkan overhed, terutamanya apabila memproses sejumlah besar input.
Untuk mencapai prestasi maksimum, pengaturcara boleh melumpuhkan penyegerakan menggunakan kaedah sync_with_stdio. Pengoptimuman ini membolehkan strim standard C menampan secara bebas, meningkatkan kelajuan dengan ketara dalam senario tertentu.
Tanda Aras Prestasi
Untuk perbandingan yang lebih komprehensif, berikut ialah penanda aras prestasi dengan pelbagai pendekatan :
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 | 54,644,808 | (Not a fair comparison) |
Seperti yang terbukti, melumpuhkan penyegerakan dan penggunaan fgets menghasilkan peningkatan prestasi yang ketara dalam C .
Atas ialah kandungan terperinci Mengapa Bacaan Input Standard C Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!