首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IO完成端口是否在完成端口之前或之后生成一个新线程?

问IO完成端口是否在完成端口之前或之后生成一个新线程?
EN

Stack Overflow用户
提问于 2012-11-01 13:37:42
回答 1查看 577关注 0票数 5

当IO完成端口完成时,我对实际发生了什么感到有点困惑。

我假定Win API允许访问IOCP队列,该队列可以以某种方式对带有特定句柄(例如套接字)的回调引用进行队列(或堆栈)。当windows接收到来自NIC的中断时,它会在某个时候到达NIC的IOCP队列,并自行执行回调(IOCP)线程池。

我的问题是,这个线程是在中断被接收时从线程池产生的,还是实际上是在调用Win API时产生的,从而使线程处于等待状态,直到被IOCP队列唤醒?

编辑:

我发现:http://msmvps.com/blogs/luisabreu/archive/2009/06/04/multithreading-i-o-and-the-thread-pool.aspx where is声明:“每当该操作完成时,它将在该I/O完成端口上排队。然后端口将继续并使用线程池的一个线程来运行您指定的回调。”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 21:27:30

可能更容易将I/O完成端口简单地看作是线程安全队列,操作系统将重叠操作的结果放在它们完成后为您准备。

创建IOCP,然后创建一些线程,这些线程调用一个函数从这个队列中删除项。一般来说,这是GetQueuedCompletionStatus()。这个函数实质上阻止线程,直到IOCP (队列)中有内容,然后允许线程检索该内容并运行。

您将文件句柄和套接字与IOCP相关联,这意味着一旦关联,它们的重叠完成将被放置在IOCP (队列)中。

这比那复杂多了,但你应该这么想。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13178248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档