重叠的I / O:某些功能仍然缺失

时间:2010-11-05 19:25:52

标签: c++ c windows

我在Windows API中非常喜欢的一件事是重叠I / O.我使用重叠的I / O(对于套接字和文件)编写了几十个网络服务器,只有有限数量的线程。我也是一名司机作家,所以我很清楚I / O是如何在“幕后”实施的。

唯一一直困扰我的是一些API函数不支持重叠模式。例如,创建文件(即调用CreateFile)始终同步工作。这很可惜,因为这些方法也可以支持重叠(异步)模式。例如,当创建(或打开)文件时 - 文件系统驱动程序会收到IRP_MJ_CREATE请求,该请求可能(通常会)返回STATUS_PENDING

我的问题是:是否可以选择异步打开文件? (但请不要告诉我创建另一个线程来打开文件)。

3 个答案:

答案 0 :(得分:1)

抱歉,如果不使用单独的线程,则无法异步打开文件。

答案 1 :(得分:1)

I / O完成端口的问题在于:(a)你的自由度太少;(b)尽管在内核中,但它远非最佳。在将Windows与Linux进行比较时,TrustLeap最近对这些性能问题发出了很多噪音。

微软没有采取后续行动感到非常难过(TrustLeap称,比尔·斯塔普斯声称IIS用户不想要表演,而是希望提高工作效率)。

我猜这些职位定义了平台。

答案 2 :(得分:1)

我怀疑不存在异步版本,因为CreateFile基本上是一个阻止操作:http://www.osronline.com/article.cfm?article=484(向下滚动到创建更可取消):

  

创建更可取消

     

你可以想象,   创造有点特别   O / S内的操作。一   特别有趣的一点是   它们总是同步处理   在I / O管理器中,所以没有   发送异步创建的方法   操作。此外,在以前的版本中   O / S,I / O管理器执行   一个不可警告的内核等待   内部创建请求   一个司机。因此,甚至终止   线程不足以取消   创建用户认为是的请求   花了太长时间。

相关问题