Java Intel 酷睿 i5 处理器上的多线程

Java multi-threading on an Intel core i5 processor

我正在使用配备 Intel Core i5 处理器的 PC,据报道它有 12 个处理器,我认为它由 6 个内核组成,每个内核有两个线程。

我做了一些研究,Java 似乎使用了内核线程。我需要显着提高现有 Java 程序的性能,并希望我可以使用全部 12 个核心 i5 线程来完成此操作。

我正在尝试使用 IntStream().parallel.forEach() Java 1.8 功能,看起来我可以并行化嵌套for() 使用尽可能多的线程循环。

我担心的是:我的代码是可以使用所有十二个线程还是一个内核上的两个线程?

要了解您的机器可以使用多少个处理器,您可以使用 availableProcessors(),摘自 java 文档的片段:

Returns the number of processors available to the Java virtual machine. This value may change during a particular invocation of the virtual machine. Applications that are sensitive to the number of available processors should therefore occasionally poll this property and adjust their resource usage appropriately

代码:

public class CoresDemo {
    public static void main(String[] args) {
        int nCores = Runtime.getRuntime().availableProcessors();
        System.out.println(nCores);
    }
}

Java 并行流使用 ForkJoinPool.commonPool;它通过 Runtime.getRuntime().availableProcessors() - 1 计算总线程数(这是为了留下一个处理器调用线程)。

因此在您的情况下,它将是 12 -1 = 11 个处理器。

因此您可以使用 11 个线程进行多线程操作。

例如在我的系统上,我确实有 8 个可用处理器,我可以看到以下操作正在由 7 个线程执行:

System.out.println(Runtime.getRuntime().availableProcessors());
        IntStream.range(0, 1000000).parallel()
                .forEach(value -> System.out.println(value + "  " + Thread.currentThread().getName()));