在《WinSock Programming Fundamental: A Compilation》一书中,IOCP有这张图:
我知道完成通知到达完成端口,并且四个排队的线程调用 GetQueuedCompletionStatus()
来获取完成数据包。但是完成端口下面显示的另外两个工作线程是做什么的,是不是这些线程也调用了GetQueuedCompletionStatus()
但是他们已经收到了一个完成数据包,并且正在处理它?</p>
最佳答案
正如 Martin James 在他的评论中所说; Queued Threads 和 Worker Threads 都是调用了 GetQueuedCompletionStatus()
的线程。指定为 Worker Threads 的线程已完成处理并正在执行此操作。指定为队列线程的线程正在等待,或者等待更多的完成,或者由于创建时使用的并发值而被 IOCP 阻塞。如果是后者,那么他们将等待其中一个工作线程在 IOCP API 知道的 API 上阻塞。如果一个 Worker Threads 完成了它所拥有的当前完成的处理,那么它将转到非事件线程队列的前面(从而允许 IOCP 提供其 LIFO 功能,该功能使事件线程保持运行,从而有助于减少上下文切换和内存故障)。
关于c++ - 谁能给我解释一下这个 IOCP 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677592/