2014-09-25 78 views
4

我以固定速率接收大量數據。我需要在不同的線程上對這些數據進行一些處理,但是這可能比數據進入時慢,所以我需要緩衝數據。由於進入可用RAM的數據量會很快耗盡,因此需要溢出到硬盤上。我所能做的事情就像是一個由文件系統支持的管道,所以作者可能被文件系統阻擋,但讀者的運行速度不會太慢。緩衝到硬盤

這裏有一個粗略的一系列要求:

  • 寫作不應該被過於緩慢運行的讀者被阻止。
  • 如果數據讀取速度慢到可用RAM耗盡,它應該溢出到文件系統。寫入磁盤以阻止是可以的。
  • 如果沒有數據可用,讀取應該阻塞,除非流被作者關閉。
  • 如果讀者能夠跟上數據,那麼它應該永遠不會碰到硬盤,因爲RAM緩衝區足夠了(很好但不是必需的)。
  • 磁盤空間應該隨着數據消耗(或之後)而恢復。

在Windows中是否存在這樣的機制?

+0

嘗試編寫沒有高速緩存的程序,並查看它是否與Windows內存管理器一起工作良好。 – 2014-09-25 17:08:10

+0

隨着我們收到的數據量的增加,我們將會因爲太快而無法工作。由於我們被困在32位機器上,所以我們也將耗盡地址空間。 – spencercw 2014-09-25 17:29:40

+1

嘗試使用Windows文件映射。它很好地管理從ram到hdd的數據交換,這裏是msdn站點:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366556%28v=vs.85%29.aspx – Flocke 2014-09-25 17:41:13

回答

0

使用實際文件。在接收數據時寫入文件,在另一個進程中讀取文件中的數據並對其進行處理。

你甚至可以獲得沒有多線程的額外好處。