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

时间:2010-06-16 03:53:17

标签: c++ windows file-io

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

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

4 个答案:

答案 0 :(得分:5)

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

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

修改

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

答案 1 :(得分:2)

重叠I / O的一个优点是它允许单个线程(或更多通常是线程池)同时处理任意数量的I / O请求。对于单用户桌面应用程序而言,这可能不是一个优势,但对于可以从许多不同客户端获取I / O请求的服务器应用程序来说,这可能是一个重大胜利。

答案 2 :(得分:1)

可能是因为Windows中重叠的I / O会告诉Windows在后台自己写出文件,而不是产生一个全新的线程并进行阻塞操作?

答案 3 :(得分:0)