在Windows中使用重叠IO进行文件写入有什么优势,而只是在我创build的单独线程中进行文件写入?
[编辑 – 请注意,我正在做文件写入没有系统caching,即我使用CreateFile FILE_FLAG_NO_BUFFERING标志)
由于默认情况下所有写入都缓存在系统缓存中,因此重叠I / O或为写入创建单独的线程几乎没有什么优势。 大多数的WriteFile调用只是memcpys的核心,这是懒惰地写入磁盘的操作系统与其他写入的最佳方式。
当然,您可以通过标志关闭缓冲的I / O到CreateFile,然后做某种异步I / O是有好处的 – 但是你可能没有/不应该那样做。
编辑
OP澄清了他们实际上使用了无缓冲的I / O。 在这种情况下,两个建议的解决方案几乎是一样的 内部Windows使用线程池来处理异步I / O请求。 但假设Windows可以更高效,因为它们的一半是在内核中实现的,具有较少的上下文切换等等。
重叠I / O的一个优点是它允许单个线程(或更通常的线程池)同时处理任意数量的I / O请求。 这对于单用户桌面应用程序来说可能不是一个优势,但是对于可以从多个不同客户端获得I / O请求的服务器应用程序来说,这可能是一个重大胜利。
可能是因为Windows中的重叠I / O会告诉Windows在自己的时间在后台写出文件,而不是产生一个全新的线程并进行阻塞操作?
我刚刚读过这篇文章:
http://msdn.microsoft.com/en-us/library/aa365683(VS.85).aspx