Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `cin` C Jauh Lebih Lambat Daripada `input()` Python untuk Membaca Baris daripada Input Standard dan Bagaimana Prestasi Boleh Dipertingkatkan?
Mengapakah membaca baris dari stdin jauh lebih perlahan dalam C berbanding Python?
Masalah:
Apabila membandingkan kod Python dan C untuk membaca baris input rentetan daripada stdin, kod Python melaksanakan dengan lebih pantas. Walaupun memastikan pelaksanaan C yang betul, Python yang setara mengatasinya dengan susunan magnitud.
Tetapan Lalai dan Panggilan Sistem:
Dalam Python, penimbalan input didayakan secara lalai , membawa kepada bacaan bahagian besar yang cekap dan lebih sedikit panggilan sistem. Sebaliknya, aliran C disegerakkan dengan stdio, memaksa cin untuk melangkau penimbalan input dan membaca aksara secara individu. Pilihan ini, bertujuan untuk mengelakkan konflik dengan fungsi stdio, secara tidak sengaja memperkenalkan overhed yang ketara.
Pengoptimuman Prestasi:
Untuk meningkatkan prestasi C, sertakan pernyataan cin.sync_with_stdio(false ) pada permulaan utama. Ini melumpuhkan penyegerakan strim dan membenarkan penimbalan bebas, meningkatkan kelajuan bacaan input dengan ketara.
Pilihan Alternatif:
Satu lagi alternatif berprestasi tinggi kepada cin ialah fgets, yang menggunakan fungsi stdio untuk bacaan input langsung.
Perbandingan Keputusan:
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 |
Atas ialah kandungan terperinci Mengapakah `cin` C Jauh Lebih Lambat Daripada `input()` Python untuk Membaca Baris daripada Input Standard dan Bagaimana Prestasi Boleh Dipertingkatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!