首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在确定线程池大小时,如何考虑超线程处理?

在确定线程池大小时,如何考虑超线程处理?
EN

Stack Overflow用户
提问于 2015-05-15 23:49:31
回答 1查看 913关注 0票数 9

我读过几篇关于如何决定线程池大小的问题和文章。问题包括:

条款包括:

  • 调整线程池的大小 by 柯克·佩珀

然而,所有这些都没有直接解决超线程化英特尔芯片上的问题。

在启用超线程的计算机上,在确定线程池大小时,是否应该考虑虚拟内核?

以Brian在Java并发在实践中的应用书中的建议为例,一般来说,对于一个面向CPU的应用程序,人们可能会考虑使用( # of cores + 1 )作为线程的数量。对于有4个真实内核和8个虚拟(超线程)核心的英特尔核心i7芯片,这个公式是( 4 + 1 )还是( 8 + 1 )

另外,在如何考虑超线程内核方面,应用程序的本质有多大的不同?。

与上面提到的相反,我自己的应用程序不受CPU限制。相反,我的应用程序是服务器端的瓦丁应用程序,线程通过JDBC连接互联网并访问本地数据库,每分钟几次。考虑到超线程基本上是附加在同一个核心上的第二组寄存器,也许一个CPU绑定应用程序应该只考虑真正的内核,而一个网络/IO绑定的应用程序应该考虑虚拟内核?

最后,芯片类型是否会影响超线程,从而影响线程池大小的计算?具体来说,西昂核心i7/i5在这个问题上有什么区别吗?例如,当前的MacBook (核心i7)和Mac (Xeon)之间的区别。

我意识到涉及的变量很多,这是一个复杂的话题。没有完全精确的答案是可能的。我只是在寻找一些一般性的规则和建议来帮助像我这样对硬件问题不那么了解的程序员。

EN

回答 1

Stack Overflow用户

发布于 2015-05-16 00:32:04

在确定线程池大小时,如何考虑超线程处理?

简单的回答是不要。

更长的答案是,Goetz的“公式”实际上只是一个经验法则。这里使用的语言

..。一般说来,对于一个带有CPU的应用程序,人们可能会认为使用(# of core+1)作为线程数

说得很清楚。有各种各样的原因,为什么“经验法则”数字可能会给你次优的性能。

正确的做法是:

  1. 选一个数字
  2. 测量性能
  3. 调整号码,然后进入第二步。

……直到你到达一个线程池大小,它大致给出了你的用例最好的答案。

另外要注意的是,在构建基于服务器的系统时,性能只是许多考虑因素之一。另一个问题是您的系统在极端负载下的性能。如果您根据“最佳情况”工作负载优化性能,而不考虑过载情况下的行为,那么如果出现问题,您可能会受到严重的冲击。

仅为最大吞吐量进行优化可能会带来不良后果.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30270317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档