缓冲到硬盘

时间:2014-09-25 17:01:15

标签: c++ windows buffer pipe

我以固定费率收到大量数据。我需要在不同的线程上对这些数据进行一些处理,但这可能比数据进入的速度慢,所以我需要缓冲数据。由于可用RAM中的数据量很快就会耗尽,因此需要溢出到硬盘上。我可以做的是像文件系统支持的管道,因此编写器可能被文件系统阻止,但读取器运行速度太慢。

这是一套粗略的要求:

  • 读者运行得太慢不应阻止写作。
  • 如果数据读取速度足够慢,可用RAM耗尽,则应该溢出到文件系统。写入磁盘可以阻止。
  • 如果没有数据可用,则应该阻止读取,除非作者已关闭该流。
  • 如果读者能够跟上数据,那么它就不应该打到硬盘上,因为RAM缓冲区就足够了(很好但不是必需的)。
  • 应该在消耗数据时(或不久之后)恢复磁盘空间。

Windows中是否存在这样的机制?

2 个答案:

答案 0 :(得分:1)

这看起来像是一个经典的消息队列。您是否考虑过MSMQ或类似问题? MSMQ拥有您要求的所有属性。您可能希望使用直接寻址来避免Active Directory http://msdn.microsoft.com/en-us/library/ms700996(v=vs.85).aspx并使用本地或TCP / IP队列地址。

答案 1 :(得分:0)

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

您甚至可以获得无多线程的额外好处。