加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – IO完成端口是否在完成端口报告之前或之后生成新线程

发布时间:2020-12-14 01:53:08 所属栏目:Windows 来源:网络整理
导读:我对IO完成端口完成时实际发生的事情感到有些困惑. 我假设Win API允许访问IOCP队列,该队列能够以某种方式对具有特定句柄的回调引用进行排队(或堆栈)(比如说套接字). 当Windows从NIC接收到中断时,它会在某个时刻到达NIC的IOCP队列并在其自己的(IOCP)线程池上
我对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其中是状态:“每当该操作完成时,它将在该I / O完成端口上对数据包进行排队.然后该端口将继续并使用线程池的一个线程来运行您指定的回调. “

解决方法

将I / O完成端口简单地想象为一个线程安全队列可能更容易,操作系统在完成后将重叠操作的结果放入其中.

您创建IOCP,然后创建一些线程,这些线程调用一个函数来从此队列中删除项目.通常这是GetQueuedCompletionStatus().这个函数实际上阻塞了你的线程,直到IOCP(队列)中有东西,然后允许你的线程检索那些东西并运行.

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

它比那更复杂,但这就是你应该思考的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读