gpt4 book ai didi

c - 为什么使用 IOCP?

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:27 26 4
gpt4 key购买 nike

我想了解为什么使用 IOCP。我可以想到两个原因:

  • 因为 WSARecv() 不会阻塞,所以我可以处理 1000 个客户端,而不必为每个客户端创建一个新线程(另外,您可以创建的线程数量是有限制的,因此,您可以处理的客户数量将受到限制。
  • 既然WSASend()不会阻塞,那么当我想发送一个大文件时,我不必创建一个新线程来发送它(如果我没有创建一个新线程那么 UI 线程当然会阻塞)。

还有哪些使用 IOCP 的原因?

最佳答案

IOCP 具有您提到的优势,但这并不是 IOCP 独有的。我不太熟悉 native 套接字 API,但某些 Win32 API 具有异步但不需要 IOCP 的“重叠 IO”。

另一个好处是,使用 IOCP,请求服务线程的数量(在某种程度上)由内核优化。内核知道请求服务线程所做的所有阻塞,并且它会确保始终有足够的(而不是更多)未阻塞的线程,以便 CPU 得到充分利用。理想情况下,您永远不会阻塞,线程数与核心数一样多(假设 100% 负载)。那会非常有效。

IOCP 还有助于减少上下文切换,因为不是切换到另一个线程来处理 IO 的结果,而是一个繁忙的现有线程已经简单地再次调用 GetQueuedCompletionStatus

GetQueuedCompletionStatusEx 可用于减少到内核的转换次数,因为您可以在一次调用中使多个 IO 出队。

关于c - 为什么使用 IOCP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com