我的CPU为8x2600 MHz(Intel Xeon CPU E5-2670 0 @ 2.60GHz)
我有一个数据处理算法,可以用Java编写并行运行。此函数确定运行时期间的并发线程数
Runtime.getRuntime().availableProcessors()
返回8.
此算法100%无阻塞。 CPU支持超线程,每个核心有2个线程。
现在我应该运行8个线程的算法,因为Java只看到8个内核,或者我应该使用16个Java线程来考虑CPU提供的超线程?
答案 0 :(得分:1)
理想的线程数取决于任务本身。现代CPU中的上下文切换可能有些昂贵,因为计算中使用的数据被大量缓存。 考虑没有IO相关活动的情况,不需要浪费CPU周期等待。然后通过使用n_threads = n_cores来实现最大吞吐量。即使可以使用超线程,上下文切换也可能很昂贵。但是,如果存在IO活动,则增加线程数超出核心数可以获益。