gpt4 book ai didi

Java - 使用多个 CPU 的非并行代码

转载 作者:行者123 更新时间:2023-11-30 03:12:00 24 4
gpt4 key购买 nike

下面的代码是非并行的。监视资源监视器,我会看到我的所有核心都会均匀分配任务。

import java.math.*;
import java.util.stream.*;

public class Main {
public static BigInteger factorial(int number) {
if(number <= 1) {
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(number).multiply(factorial(number-1));
}

public static void main(String[] args){
IntStream.range(1, 5000).forEach(Main::factorial);
}
}

当我使任务并行时,改变:

IntStream.range(1, 5000).forEach(Main::factorial);

至:

IntStream.range(1, 5000).parallel().forEach(Main::factorial); 

我会再次看到所有核心都在使用(仅这一次,我的所有核心都会有 100% 使用率)。我可以解释由于我的处理器来自石器时代(Core 2 Quad)而对核心的限制,但我无法解释顺序任务如何也使用多个核心。

最佳答案

顺序计算是在单个操作系统线程中执行的,但操作系统线程并不绑定(bind)到特定的 CPU 内核,并且操作系统可能决定将线程从一个内核移动到另一个内核(所谓的线程迁移)。您可以将线程或进程绑定(bind)到设置线程关联性的特定核心(这取决于您使用的操作系统)。

关于Java - 使用多个 CPU 的非并行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com