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
Lepaskan: 2024-11-25 15:54:11
asal
167 orang telah melayarinya

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);
    Salin selepas log masuk
  2. Gunakan fgets Sebaliknya:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan