我正在編寫一個多線程應用程序,截至目前,我有這個想法。我有一個FILE*[n]
,其中n
是一個在運行時確定的數字。我打開所有n個文件進行讀取,然後多個線程可以訪問並讀取它。每個文件的數據計算是等效的,即如果假設串行執行,則每個文件將同時保留在存儲器中。在寫入文件時減少磁盤訪問次數C
每個文件都可以是任意大的,所以不應該認爲它們可以加載到內存中。
現在在這種情況下,我想減少發生的磁盤IO的數量。如果有人可以爲這種情況建議任何共享內存模型,那將是非常好的(我不知道我是否正在使用一個模型,因爲我對於實現的方式知之甚少)。我不知道該如何實現。換句話說,我只是想知道什麼是最有效的模型來實現這種情況。我正在使用C
。
編輯:更詳細的情況。
實際的問題是我有n個包含在n個文件中的數據的布隆過濾器,並且一旦文件中的所有元素都插入相應的布隆過濾器中,我需要做成員測試。由於成員資格測試是對數據文件的只讀過程,因此我可以從多個線程讀取文件,並且可以輕鬆並行處理此問題。現在有數據的文件數量相當大(大約20k,注意文件數等於布隆過濾器的數量),所以我選擇產生一個線程用於測試一個布隆過濾器,即每個布隆過濾器都有它自己的線程,將逐一讀取其他所有文件,並根據bloom過濾器測試數據的成員資格。我希望在這種情況下儘量減少磁盤IO。
你在說什麼平臺?如果你在Linux上,最簡單的方法是將它們作爲內存映射文件打開,並讓操作系統處理它。 (我敢肯定,Windows有相同的功能。) –
我在linux上。你能解釋一下嗎,請 –
不確定你試圖通過共享內存分享?如果你正在考慮內存映射文件,那不會嚴重減少IO(你仍然必須閱讀所有你必須閱讀的東西)。爲什麼你認爲IO是一個問題?我認爲這裏沒有足夠的細節來給出有意義的建議......我注意到您的問題標題提到了寫入文件,但是沒有提及如何/在哪裏將文件寫入正文 –
John3136