c++ - 谁能给我解释一下这个 IOCP 图?

标签 c++ windows sockets network-programming iocp

在《WinSock Programming Fundamental: A Compilation》一书中,IOCP有这张图:

enter image description here

我知道完成通知到达完成端口,并且四个排队的线程调用 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/

相关文章:

c# - 以编程方式旋转显示?

python - 获取进程启动的工作目录

sockets - 通过套接字发送图像

java - 我正在尝试从 JAVA 中的 ip 地址获取位置信息,但我收到了 java.net.SocketException : Connection reset error

c++ - 如何对段进行排序 C++

c++ - 一个生产者线程,多个消费者

c++ - 使用带 std::thread 的 SFML 的编译器错误

c++ - 关于数组和指针混合的声明

windows - Windows 上存储的 github 身份验证 token 在哪里?

javascript - Socket.io事件监听器/事件处理程序Socket.io