正在缓冲到硬盘
Buffering to the hard disk
我正在以固定速率接收大量数据。我需要在另一个线程上对这些数据进行一些处理,但这可能比数据输入的速度慢,所以我需要缓冲数据。由于可用RAM中的数据量会很快耗尽,因此需要溢出到硬盘上。我可以使用类似于文件系统备份管道的东西,这样写入程序可能会被文件系统阻塞,但不会被运行太慢的读取器阻塞。
以下是一组粗略的要求:
- 写作不应该因为读者跑得太慢而受阻
- 如果数据读取速度慢到可用RAM耗尽,那么它应该溢出到文件系统。可以阻止对磁盘的写入
- 如果没有可用的数据,则应阻止读取,除非写入程序已关闭流
- 如果读取器能够跟上数据,那么它就永远不应该碰到硬盘,因为RAM缓冲区就足够了(很好,但不是必不可少的)
- 磁盘空间应该随着数据的消耗而恢复(或很快恢复)
Windows中是否存在这样的机制?
这看起来像一个经典的消息队列。你考虑过MSMQ或类似的吗?MSMQ具有您所要求的所有属性。您可能希望使用直接寻址来避开Active Directoryhttp://msdn.microsoft.com/en-us/library/ms700996(v=vs.85).aspx,并使用本地或TCP/IP队列地址。
使用实际文件。在收到数据时写入文件,在另一个过程中从文件中读取数据并进行处理
您甚至可以获得无多线程的额外好处。
相关文章:
- 如何使用原子指针执行双缓冲
- 消费者和生产者问题的双重缓冲
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 我似乎无法修改帧缓冲
- 如何在C++中写入 1000 个文件时有效地缓冲
- 帧缓冲纹理变为白色(片段着色器不会影响它)
- 我是否使用双缓冲?
- 通过搜索硬盘驱动器查找文件目录
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 如何强制文件描述符缓冲我的输出
- 如何确定文件或文件夹是在SSD还是硬盘驱动器上?
- Qt双缓冲行为
- 如何在没有缓冲的情况下使用 parquet-cpp 写入面向流/行的数据?
- MySQL 事务和缓冲的请求列表
- 将硬盘驱动器上的 BIT XXX 从 0 更改为 1
- 使用 std::stringbuf 进行缓冲的效果,同时通过插入运算符'<<'执行写入
- Qt 帧缓冲对象甚至不渲染顶点
- MySQL连接器C 结果集被缓冲
- w/ w/结构带char缓冲液的静态初始化[]
- 正在缓冲到硬盘