首頁  >  文章  >  後端開發  >  為什麼在 C 中從 stdin 讀取行比在 Python 中慢,如何改進?

為什麼在 C 中從 stdin 讀取行比在 Python 中慢,如何改進?

Susan Sarandon
Susan Sarandon原創
2024-11-25 15:54:11141瀏覽

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

與Python 相比,在C 中從stdin 讀取行的性能損失

人們可能會驚訝地發現,從stdin 讀取文字行C 比Python 中的等效操作慢很多。為了解決這種性能差異,讓我們深入研究它發生的原因並提供緩解它的解決方案。

C 中的預設設定

預設情況下,C 的 cin 流是與標準輸入和輸出 (stdio) 同步,導致輸入緩衝。這意味著 cin 一次讀取一個字符,導致大量的系統調用,這是一個效能瓶頸。

Python 的最佳化輸入處理

相較之下,Python採用最佳化的輸入處理機制,以區塊的形式緩衝輸入,減少系統呼叫並提高效能。

改良C 讀取效能

為了增強C 的讀取效能,可以用兩種方法:

  1. 禁用cin的同步stdio:

    std::cin.sync_with_stdio(false);
  2. 使用 fgets代替:

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

比較方法

下表比較了各種實現的性能:

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

顯然,禁用cin 同步或使用fgets 顯著提高了C 的性能,使其與Python相當就從標準輸入讀取行而言。

以上是為什麼在 C 中從 stdin 讀取行比在 Python 中慢,如何改進?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn