與Python 相比,在C 中從stdin 讀取行的性能損失
人們可能會驚訝地發現,從stdin 讀取文字行C 比Python 中的等效操作慢很多。為了解決這種性能差異,讓我們深入研究它發生的原因並提供緩解它的解決方案。
C 中的預設設定
預設情況下,C 的 cin 流是與標準輸入和輸出 (stdio) 同步,導致輸入緩衝。這意味著 cin 一次讀取一個字符,導致大量的系統調用,這是一個效能瓶頸。
Python 的最佳化輸入處理
相較之下,Python採用最佳化的輸入處理機制,以區塊的形式緩衝輸入,減少系統呼叫並提高效能。
改良C 讀取效能
為了增強C 的讀取效能,可以用兩種方法:
禁用cin的同步stdio:
std::cin.sync_with_stdio(false);
使用 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中文網其他相關文章!