Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Membaca Baris dari stdin Lebih Lambat dalam C berbanding Python, dan Bagaimana Ia Boleh Diperbaiki?

Mengapa Membaca Baris dari stdin Lebih Lambat dalam C berbanding Python, dan Bagaimana Ia Boleh Diperbaiki?

Susan Sarandon
Susan Sarandonasal
2024-11-25 15:54:11169semak imbas

Why is Reading Lines from stdin Slower in C   than in Python, and How Can It Be Improved?

Penalti Prestasi Membaca baris dari stdin dalam C Berbanding Python

Seseorang mungkin terkejut apabila mendapati bahawa membaca baris teks daripada stdin dalam C adalah jauh lebih perlahan daripada operasi yang setara dalam Python. Untuk menangani perbezaan prestasi ini, mari kita teliti sebab ia berlaku dan sediakan penyelesaian untuk mengurangkannya.

Tetapan Lalai dalam C

Secara lalai, strim cin C ialah disegerakkan dengan input dan output standard (stdio), mengakibatkan penimbalan input dilumpuhkan. Ini bermakna cin melaksanakan satu aksara dibaca pada satu masa, menghasilkan banyak panggilan sistem, yang merupakan kesesakan prestasi.

Pengendalian Input Dioptimumkan Python

Sebaliknya, Python menggunakan mekanisme pengendalian input yang dioptimumkan yang menampan input dalam ketulan, mengurangkan panggilan sistem dan menambah baik prestasi.

Meningkatkan Prestasi Bacaan C

Untuk meningkatkan prestasi bacaan C , dua pendekatan boleh diguna pakai:

  1. Lumpuhkan Penyegerakan cin dengan stdio:

    std::cin.sync_with_stdio(false);
  2. Gunakan fgets Sebaliknya:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), stdin)) {
        // process line
    }

Perbandingan Pendekatan

Jadual berikut membandingkan prestasi pelbagai pelaksanaan:

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, melumpuhkan penyegerakan cin atau menggunakan fgets dengan ketara meningkatkan prestasi C , menjadikannya setanding dengan Python dari segi bacaan baris daripada stdin.

Atas ialah kandungan terperinci Mengapa Membaca Baris dari stdin Lebih Lambat dalam C berbanding Python, dan Bagaimana Ia Boleh Diperbaiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn