我有多个线程,每个线程接受请求,进行一些处理,将结果存储在提交日志中,并返回结果 . 为了保证最多x秒的数据丢失,此提交日志需要每隔x秒进行一次fsync .
我想避免线程之间的同步,这意味着它们每个都需要有自己的提交日志而不是共享日志 - 是否有可能以高效的方式定期fsync所有这些不同的提交日志?
这是在Linux,ext4(或ext3)上
(注意:由于代码的性质,即使在正常处理过程中,线程也需要从提交日志中重新读取一些自己的最新数据(但绝不会有其他线程提交日志数据),所以我认为这样做是不切实际的 . 使用共享日志,因为许多线程需要读/写它
1 回答
如果你每隔几秒钟只需要刷新一次,你需要fsync()吗?即操作系统应该定期为您执行此操作(除非系统负载过重且磁盘I / O供应不足) .
否则,让你的线程做类似的事情:
其中n是一个值,例如3如果high_resolution_time()返回返回Unix EPOCH时间(以秒表示) . 会让线程每隔3秒刷新一次文件 .
当然,问题是您需要更高的时钟分辨率,以避免每秒多次通过此代码段的线程不能快速连续多次刷新其文件 . 我不知道你使用的是什么编程语言,但在C on Linux上你可以使用gettimeofday: