【发布时间】:2014-09-04 01:52:30
【问题描述】:
在 Windows 上,当您执行 I/O 时,您可以使用 OVERLAPPED 选项异步执行。这样做与在另一个线程上同步执行 I/O 有什么区别吗?如果是这样,哪个更好?操作系统是否只是在异步情况下生成一个单独的线程,或者它只是在驱动程序线程上排队并发送信号而不是阻塞等待?
谢谢!
【问题讨论】:
-
操作系统几乎肯定不会仅仅为了服务重叠的 I/O 请求而产生新线程。查找I/O completion ports,它实际上需要您提供自己的线程来从 I/O 完成端口中提取完成通知。确切地说,Windows 是如何做到这一点的只是一个实现细节,但由于它是一个操作系统,它除了产生线程之外还可以发挥一些技巧。
-
异步 i/o 的结果好坏参半——尤其是 WriteFile 调用。使用 OVERLAPPED 标志调用的某些 WriteFile 操作实际上会阻塞而不是立即返回。尽管我想让重叠的 i/o 工作正常工作,但它只是增加了代码的复杂性,因为我仍然必须轮询/等待重叠操作完成......最后,“产生一个线程”方法实际上更易于实施,并且不会造成任何不良影响。 YMMV。制作原型并进行测量以确认预期收益 - 结果可能会让您大吃一惊。
标签: windows asynchronous overlapped-io