2014-09-25 79 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

使用实际文件。在接收数据时写入文件,在另一个进程中读取文件中的数据并对其进行处理。

你甚至可以获得没有多线程的额外好处。