如何为完成端口创建多个线程?

Posted

技术标签:

【中文标题】如何为完成端口创建多个线程?【英文标题】:How to create multiple threads for the completion port? 【发布时间】:2015-03-03 11:03:38 【问题描述】:

多个线程可以使用GetQueuedCompletionStatus() 函数从单个完成端口出列完成数据包。是否有创建这些线程的特殊功能?或者我只是使用例如CreateThread()_beginthreadex() 并根据需要创建尽可能多的线程?

【问题讨论】:

您可以自己创建完成端口并使用CreateThread 或等效的,或者您可以让线程池处理这一切:CreateThreadpoolIo。 @Harry Johnston 所以如果我想创建 4 个在完成端口上等待的线程,我只需调用 CreateThread() 4 次?另外,我猜我应该使用_beginthreadex() 而不是CreateThread(),对吗? (1) 是的。 (2) 除了风格问题之外,它不再重要了。使用您喜欢的任何一个。 其实这不仅仅是风格问题。如果您使用 c 运行时,则必须使用 _beginthreaex(),否则关键库组件在首次使用之前将无法正确初始化,这可能会在内存不足的情况下导致问题(请参阅CreateThread() 的文档)。 【参考方案1】:

在给定 IOCP 上调用 GetQueuedCompletionStatus() 的线程没有什么特别之处。任何线程都可以做到。因此,您可以使用通常的线程创建函数来创建“I/O 线程”。一般来说,最好使用_beginthreadex(),除非您正在为不支持它的平台编写代码,或者您没有与 CRT 链接。

【讨论】:

以上是关于如何为完成端口创建多个线程?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 mysql 添加值:端口的空值

IOCP 是不是创建自己的线程?

完成端口线程的 OutOfMemoryException

将多个 HTTP 请求等待同一个 I/O 完成端口

节点集群:如何为每个工作人员分配单独的服务器/端口?

也谈IO完成端口