【发布时间】:2014-11-20 13:21:40
【问题描述】:
我正在以固定速率接收大量数据。我需要在不同的线程上对这些数据进行一些处理,但这可能比传入的数据运行得慢,所以我需要缓冲数据。由于可用 RAM 中的数据量很快就会耗尽,因此需要溢出到硬盘上。我可以使用类似文件系统支持的管道,因此写入器可能会被文件系统阻塞,但不会被运行速度太慢的读取器阻塞。
这是一组粗略的要求:
- 不应因阅读器运行速度过慢而阻塞写入。
- 如果数据读取速度太慢以至于可用 RAM 耗尽,它应该溢出到文件系统。对磁盘的写入被阻止是可以的。
- 如果没有可用数据,则读取应该阻塞,除非流已被写入器关闭。
- 如果阅读器能够跟上数据,那么它永远不会撞到硬盘,因为 RAM 缓冲区就足够了(很好但不是必需的)。
- 应在数据被消耗时(或不久之后)恢复磁盘空间。
Windows 中是否存在这种机制?
【问题讨论】:
-
尝试在没有高清缓冲的情况下编写程序,看看它是否已经在 Windows 内存管理器中运行良好。
-
随着我们接收到的数据量,我们将很快耗尽空间而无法正常工作。由于我们被困在 32 位机器上,我们还将耗尽地址空间..
-
尝试 Windows 文件映射。它非常擅长管理从 ram 到 hdd 的数据交换,这里是 msdn 站点:msdn.microsoft.com/en-us/library/windows/desktop/…
-
文件映射的问题在于它的大小是固定的。但是,您可以根据需要即时创建新的文件映射来解决此问题。您需要确保提前足够远地创建每个新映射,以便在需要时为您准备好,您可能需要一个单独的线程。