我正在以固定速率接收大量数据。我需要在不同的线程上对此数据进行一些处理,但这可能比传入的数据运行得慢,所以我需要缓冲数据。由于可用 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/