怎樣才能多線程用於有效讀取文件[按塊讀取]?或任何提高讀取速度的方法。
我一直在嘗試實際的結果,這是一個多線程的好東西,不像我以前的建議。非線程變量運行在1m44,711s,4線程(在4個內核上)運行在0m31,559s,而8線程(在4個內核+ HT上)運行在0m23,435s。主要改進 - 幾乎是加速的5倍。
那麼,你如何分擔工作量?將它拆分爲N個塊(n ==線程數),並且除了首先尋找第一個非單詞字符之外的每個線程。這是他們的邏輯塊的開始。他們的邏輯塊結束於它們的結束邊界,在該點之後被取整爲第一個非單詞字符。
並行處理這些塊,將它們全部同步到一個線程,然後使該線程執行結果合併。
爲了提高閱讀速度,你可以做的最好的下一件事是確保你儘可能不復制數據。通過內存映射文件讀取並通過將指針或索引保存到開始和結束來查找字符串,而不是累積字節。
有沒有比地圖更好的數據結構可以用來有效地找到輸出?
嗯,因爲我不認爲你會使用該命令,unordered_map是一個更好的選擇。我也將它作爲unordered_map<std::string_view, size_t>
- string_view將其複製到比字符串更小的位置。
在剖析中,我發現53%的時間花在尋找包含給定單詞的確切桶上。
不是'std :: string_view' C++ 17? –
'std :: string_view'是C++ 17。你也可以使用boost :: string_view,或者使用命中和複製。 – dascandy