c++ - 缓冲到硬盘

标签 c++ windows buffer pipe

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

这是一组粗略的要求:

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

Windows中有这样的机制吗?

最佳答案

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

关于c++ - 缓冲到硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044175/

相关文章:

c++ - 为什么返回局部变量或临时地址只是警告而不是错误?

c++ - 命名空间范围问题

windows - 如何在批处理中检查文件是否为空

C++ 代码转储 "random"数据

python - 如何在不等待输入的情况下检查可能为空的标准输入?

linux - Linux 上的缓冲过滤管道

android - AudioTrack 延迟 : obtainBuffer timed out

c++ - 什么时候需要显式调用 std::move ,什么时候不需要在 cpp 中?

c++ - 检查大量类似条件的简单方法?

c++ - 可执行错误 : Can't start program