我正在使用Windows 7中的VS2012(64位8核)從本地硬盤讀取.csv文件。在C++中,如何使用多個線程讀取一個文件?
我正在閱讀的文件有50,000多行,每行有200多個屬性,因此讀取數據並將它們提供給相應的變量非常耗時。因此,我想知道是否可以用多線程加速它,每個線程讀取文件的一部分。
我已經google了一下,發現有人說,由於硬盤不是多線程,使用多線程來做到這一點將會實際上慢下來。 這是真的嗎?
如果可以讀取多個線程的文件,任何人都可以給我一個我可以學習的例子嗎?
此外,是否有可能將明確分配給CPU內核的線程或任務?
還有一個最後的問題:我用Python讀了同一個文件,並且在幾秒鐘內就完成了。 我可以知道爲什麼Python的讀取速度比C++快嗎?
在C++中使用STL文件緩衝的一個簡單的示例一般地從文件中的確會慢下來發言多線程讀數。該程序可能是多線程的,但考慮磁盤控制器和讀/寫磁頭......可以構造此規則的例外情況,例如並行文件系統(您知道是否有),計算很多文件讀取塊之間的處理,以及其他一些情況。 –
您可以讓一個線程讀取文件,然後將塊傳遞給多個解析器線程。理想情況下,您有一個用於保存數據的併發集合,因此工作線程可以快速有效地將解析結果插入(假設您需要將所有數據放在內存中的一個數據結構中)。 – hyde
除非在讀取數據後處理數據的計算量非常大,否則使用多線程讀取文件將無濟於事。沒有看到你如何在Python和C++中實現文件讀取,很難知道爲什麼你在C++中看到更糟的性能。我猜你正在使用C++ API不正確或很差。 – Kylos