谁能给我解释一下这个 IOCP 图?
Posted
技术标签:
【中文标题】谁能给我解释一下这个 IOCP 图?【英文标题】:Can anyone explain to me this IOCP diagram? 【发布时间】:2015-02-23 15:46:34 【问题描述】:在“WinSock Programming Fundamental: A Compilation”一书中,IOCP有这张图:
我了解完成通知到达完成端口,并且四个排队的线程调用GetQueuedCompletionStatus()
以获取完成数据包。但是完成端口下面显示的另外两个工作线程是做什么的,是不是这些线程也调用了GetQueuedCompletionStatus()
,但是他们已经收到了一个完成包,现在正在处理它?
【问题讨论】:
我相信是的,是的。 “活动”线程正在处理缓冲区等,而“非活动”线程仍停留在 GetQueuedCompletionStatus() 上,等待某事做,或者由于 IOCP 的一个特性对运行线程的总体上限而被挂起。跨度> 题外话:C++部分的整个首页(50+题)是SSL、IOCP和Sockets..这是什么?地球上的每个人都在同时使用高性能插座吗?哈哈。 :O 看起来很酷。 我刚刚快速浏览了您提到的那本书。就我个人而言,我会得到有关该主题的适当文本,Microsoft Windows 的网络编程仍然是了解它如何工作的最佳选择,即使它有点过时了。了解 IOCP 的运作方式后,您可以使用 MSDN 和在线资源更新您的知识。 【参考方案1】:正如马丁詹姆斯在评论中所说的那样; Queued Threads 和 Worker Threads 都是调用GetQueuedCompletionStatus()
的线程。指定为工作线程的线程已完成处理并正在执行此操作。指定为 Queued Threads 的线程正在等待更多的完成,或者由于创建它的并发值而被 IOCP 阻塞。如果是后者,那么他们将等待其中一个工作线程阻塞 IOCP API 知道的 API。如果一个工作线程完成了对当前完成的处理,那么它将进入非活动线程队列的前面(从而允许 IOCP 提供其 LIFO 功能,使活动线程保持运行,从而有助于减少上下文切换和内存错误)。
【讨论】:
以上是关于谁能给我解释一下这个 IOCP 图?的主要内容,如果未能解决你的问题,请参考以下文章
谁能给我解释一下BIM轻量化是啥?而且我现在看到好多公司都在做BIM轻量化,有谁给我解释一下吗?
为什么下面的代码抛出System.Reflection.AmbiguousMatchException谁能给我解释一下?