為什麼C 標準輸入讀取效率低於Python
比較Python 和C 從標準讀取字串輸入行的效能輸入( stdin)時,出現了顯著的差異:C 代碼的運行速度顯著變慢。這促使我們調查造成這種性能差距的根本原因。
問題源自於 C 的預設設定。預設情況下,istream(例如 cin)與 stdio 同步,以避免輸入緩衝。為了最佳化效能,可以使用 std::ios_base::sync_with_stdio(false) 語句來停用此同步。此調整緩解了主要的效能限制。
標準輸入流在 Python 和 C 之間的設計上運作方式不同。 Python 通常是有緩衝的,而 C 的預設是無緩衝的。一般情況下,緩衝減少了系統調用,提高了效率。然而,C 中基於 FILE* 的 stdio 和 iostream 的單獨實作和緩衝區在一起使用時會帶來潛在問題。
為了避免緩衝區不一致和意外結果,C 預設將流與 stdio 同步。雖然這可以防止潛在的問題,但它會帶來開銷,特別是在處理大量輸入時。
為了實現最大效能,程式設計師可以使用sync_with_stdio方法來停用同步。此最佳化允許 C 標準流獨立緩衝,在某些場景下顯著提高速度。
效能基準
為了更全面的比較,這裡有各種方法的效能基準:
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 | 54,644,808 | (Not a fair comparison) |
顯然,停用同步並使用fget 會顯著提高C 語言的效能.
以上是為什麼 C 標準輸入讀取速度比 Python 慢,如何改進?的詳細內容。更多資訊請關注PHP中文網其他相關文章!