在单独的线程中使用重叠IO与文件写入进行文件写入

War*_*pin 7 c++ windows file-io

在Windows中使用带有重叠IO的文件写入是否有任何优势,而不仅仅是在我创建的单独线程中编写文件?

[编辑 - 请注意我在没有系统缓存的情况下进行文件写入,即我在CreateFile中使用FILE_FLAG_NO_BUFFERING标志)

Ter*_*fey 5

由于默认情况下所有写入都缓存在系统缓存中,因此完成重叠I/O或创建单独的写入线程几乎没有什么优势.大多数WriteFile调用只是它们核心的memcpys,它们通过OS以其他写入的最佳方式懒惰地写入磁盘.

当然,你可以通过标志关闭缓冲I/O到CreateFile,然后做一些异步I/O也有好处 - 但你可能没有/不应该这样做.

编辑

OP已澄清他们实际上正在使用无缓冲的I/O. 在这种情况下,两个建议的解决方案几乎相同; 内部Windows使用线程池来为异步I/O请求提供服务.但假设Windows可以更高效,因为它们的一半是在内核中实现的,具有较少的上下文切换等.