如何在使用超线程多核CPU时确定最佳java线程数

时间:2017-05-11 10:04:15

标签: java multithreading algorithm hyperthreading

我的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提供的超线程?

1 个答案:

答案 0 :(得分:1)

理想的线程数取决于任务本身。现代CPU中的上下文切换可能有些昂贵,因为计算中使用的数据被大量缓存。 考虑没有IO相关活动的情况,不需要浪费CPU周期等待。然后通过使用n_threads = n_cores来实现最大吞吐量。即使可以使用超线程,上下文切换也可能很昂贵。但是,如果存在IO活动,则增加线程数超出核心数可以获益。