我应该为 IOCP 创建多少线程?

Posted

技术标签:

【中文标题】我应该为 IOCP 创建多少线程?【英文标题】:How many threads I should create for IOCP? 【发布时间】:2015-03-04 02:30:06 【问题描述】:

我读到传递给CreateIoCompletionPort() 函数的NumberOfConcurrentThreads 参数的理想数字是0,这将转换为内核数。

但是,我应该实际创建多少个线程来等待完成端口,它是否也应该与内核数相同?

【问题讨论】:

如果你做了很多 other 等待(在完成端口以外的事情上)的时间很长,那么有额外的线程是有意义的,这样CPU可以充分利用。如果您从不等待完成端口以外的任何东西,那么 AFAIK 没有理由每个核心拥有多个。我认为您需要尝试为您的特定应用程序找到最佳平衡。 (当然对于许多现实世界的应用程序,一两个线程可以轻松处理所有流量。这取决于负载量。) 【参考方案1】:

这个问题不可能用一个确定的数字来回答,因为这个数字取决于代码设计中的许多其他因素。诸如存在多少其他线程、此 IOCP 的线程工作多久导致它们阻塞、您实际拥有多少内核等因素。

我首选的方法是使线程数在外部可配置,以便您可以在代码工作后对其进行分析并调整线程数。

在许多设计和现代硬件中,我发现少量线程绰绰有余,而且这个数量通常远少于内核数量。

【讨论】:

以上是关于我应该为 IOCP 创建多少线程?的主要内容,如果未能解决你的问题,请参考以下文章

创建多少线程以及何时创建?

IOCP AcceptEx 在连接时未创建完成

IOCP 浅析(java代码实现)

多线程 IOCP 客户端问题

IOCP实现高并发以及与传统socke编程的对比

Windows完成端口 IOCP模型