【问题标题】:WinApi: IO Completion PortsWinApi:IO 完成端口
【发布时间】:2021-08-05 07:31:27
【问题描述】:

请解释一下:

来自 MSDN:https://docs.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports#supported-io-functions

考虑一个和多个并发值会发生什么 在 GetQueuedCompletionStatus 函数调用中等待的线程。在 这种情况下,如果队列总是有完成数据包等待,当 正在运行的线程调用GetQueuedCompletionStatus,它不会阻塞 执行,因为如前所述,线程队列是 LIFO。 相反,这个线程将立即拿起下一个排队的 完成包。不会发生线程上下文切换,因为 正在运行的线程不断地拾取完成数据包,并且 其他线程无法运行。

我不明白我们在说什么其他线程?

PS:很抱歉提出这样一个简单而愚蠢的问题。我真的很困惑。

【问题讨论】:

  • 请链接。另外,究竟是哪一部分不清楚?哪些部分是清楚的?
  • 乌尔里希·埃克哈特,docs.microsoft.com/en-us/windows/win32/fileio/…。我无法理解 OTHER 线程是关于什么的。在 MSDN 的引用中,它以粗体突出显示。
  • 将该链接添加到您的问题中,您仍然可以edit 它。无论如何,那些其他线程不是第一个引用的句子中提到的那些吗?
  • 但如果 iocp 中存在更多数据包?当然,许多线程可以弹出数据包并运行。取决于端口中的数据包计数和此端口的 NumberOfConcurrentThreads
  • 其他线程无法运行 - 当端口达到其并发限制时 - 仅适用于这种情况

标签: c++ c winapi


【解决方案1】:

它使用了 NumberOfConcurrentThreads 设置为 1 但仍有多个线程调用 GetQueuedCompletionStatus 的极端示例。就是说在这种情况下(总是有一个数据包排队)第一个返回数据包的线程将继续返回数据包,而在 GetQueuedCompletionStatus 中等待的其他线程将继续等待。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2021-08-05
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多