1 c++ sockets windows network-programming iocp
在《WinSock Programming Fundamental: A Compilation》一书中,IOCP有这个图:

我知道完成通知到达完成端口,并且四个排队的线程调用GetQueuedCompletionStatus()以获取完成数据包。但是在完成端口下面显示的另外两个工作线程是做什么的,是不是这些线程也调用了GetQueuedCompletionStatus()但是他们已经收到了一个完成包,现在正在处理呢?
正如马丁詹姆斯在他的评论中所说;排队线程和工作线程都是调用GetQueuedCompletionStatus(). 指定为工作线程的线程已完成处理并正在执行此操作。指定为排队线程的线程正在等待更多完成或由于创建它的并发值而被 IOCP 阻塞。如果是后者,那么他们将等待其中一个工作线程阻塞在 IOCP API 知道的 API 上。如果一个工作线程完成处理它所拥有的当前完成,那么它将转到非活动线程队列的前面(从而允许 IOCP 提供其 LIFO 功能,使活动线程保持运行,从而有助于减少上下文切换和内存故障)。