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