1

在我的程序中,我打开了两个文件以供写入,一个包含数据块的内容文件和一个包含迄今为止已写入数据块的映射的索引文件。

我想将它们都刷新到磁盘上,尽可能提高性能,唯一的限制是数据文件中的块必须在映射文件中的相应块之前写入(自然)。

问题是,出于延迟和吞吐量原因,我想避免阻止 IE 执行 fsync。

有任何想法吗?

4

1 回答 1

1

我认为您不能在单个执行路径中轻松做到这一点。您需要 fsync 来保证写入磁盘 - 这将不得不等待写入。

我怀疑通过将编写任务委托给单独的线程或进程来做到这一点是可能的(但并不容易)。在现有程序中生成数据并使用任何看起来合理的方法将其“写入”到第二个线程/进程。这可以是非阻塞的。然后第二个线程会将任何新数据写入内容文件的数据,然后 fsync,然后写入索引文件,然后再次检查新数据。关键设计决策与如何分离两条执行路径、如何在它们之间进行通信以及是否需要将写回报告给主程序有关。这仍然可能存在延迟和吞吐量问题,但这是选择使索引文件和内容文件同步的部分成本。至少有机会在磁盘上等待时完成工作。

看看这是否被很好地封装以便在任何事务数据库的源中对您有用可能值得一看。当您为内容文件挂载文件系统时,您还可以调查同步选项。

于 2010-05-06T08:22:15.607 回答