Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用超线程多核CPU时,如何确定java线程的最佳数量_Java_Multithreading_Algorithm_Hyperthreading - Fatal编程技术网

当使用超线程多核CPU时,如何确定java线程的最佳数量

当使用超线程多核CPU时,如何确定java线程的最佳数量,java,multithreading,algorithm,hyperthreading,Java,Multithreading,Algorithm,Hyperthreading,我的CPU是8x2600 MHz(英特尔至强CPU E5-2670 0@2.60GHz)。 我有一个用Java编写的数据处理算法,可以并行运行。此函数用于确定运行时的并发线程数 Runtime.getRuntime().availableProcessors()返回8 该算法是100%无阻塞的。 CPU支持超线程,每个核心2个线程 现在我应该用8个线程运行算法,因为Java只能看到8个内核,还是应该使用16个Java线程来考虑CPU提供的超线程?理想的线程数取决于任务本身。由于计算中使用的数据被

我的CPU是8x2600 MHz(英特尔至强CPU E5-2670 0@2.60GHz)。
我有一个用Java编写的数据处理算法,可以并行运行。此函数用于确定运行时的并发线程数
Runtime.getRuntime().availableProcessors()
返回8

该算法是100%无阻塞的。 CPU支持超线程,每个核心2个线程


现在我应该用8个线程运行算法,因为Java只能看到8个内核,还是应该使用16个Java线程来考虑CPU提供的超线程?

理想的线程数取决于任务本身。由于计算中使用的数据被大量缓存,现代CPU中的上下文切换可能有些昂贵。
考虑没有IO相关活动的情况,CPU周期不必浪费等待。然后,通过使n个线程=n个内核来实现最大吞吐量。即使在超线程可用的情况下,上下文切换也可能很昂贵。但是,如果存在IO活动,那么将线程数增加到核心数之外会有好处

对于8个以上的测试,最好做一些性能测试,包括边缘测试。好处不仅仅在于内核的数量。如果我们只为一个核心说话。操作系统会在一小段时间内将手交给一个线程,你的应用程序不是唯一一个要求时间的应用程序,因此如果你有多个线程,你会更频繁地伸出手来,因为你的应用程序更有可能伸出手来。这不完全是为什么,这背后的逻辑是复杂的,但你会明白的。(在法语中,我们称之为“ordonnanceur”,但我找不到翻译…)你真的要知道吗?难道你不能创建一个CachedThreadPool并将其余部分留给它的实现吗?@AxelH大致上是一个调度程序。我认为你的BIOS中禁用了HT,或者如果启用了HT,你的操作系统不支持它<如果在8核CPU上启用了HT,则代码>运行时.getRuntime().availableProcessors()将返回16。