gpt4 book ai didi

java - 多线程代码对于很多工作人员来说太慢,但对于很少的工作人员来说速度很快

转载 作者:行者123 更新时间:2023-12-02 01:16:56 25 4
gpt4 key购买 nike

我编写了一段代码来加速暴力算法,我决定使用多线程。虽然我是多线程的新手,并且我知道通过创建大量工作线程(线程)并将作业分配给它们,蛮力应该 super 快。好吧,我下面的代码在工作人员较少(10 或更少)时运行速度更快,但在工作人员较多(1000)时工作速度较慢。为什么会有奇怪的行为以及错误在哪里?

ExecutorService executor = Executors.newFixedThreadPool(1000);
List<Callable<Integer>> callList = new ArrayList<>();
Callable<Integer> worker;
for (int i = 0; i < 1000; i++) {
worker = new WorkerThread(start, end, id);
Thread.currentThread().setName("Staff "+i);
callList.add(worker);
start = end;
end = end + addition + 1;
}
int result = executor.invokeAny(callList);
System.out.println("Done Work");

System.out.println(result);
executor.shutdownNow();
executor.awaitTermination(5, TimeUnit.NANOSECONDS);

最佳答案

为了详细说明 Slaw 的评论,当您并行运行一个进程时,处理器实际上可以并行执行的操作是有限的。当使用的线程数量小于或等于计算机拥有的数量时,处理器理论上可以同时运行代码(如果没有给予其他任务)。然而,在此之上,处理器必须开始在线程之间来回切换,以使程序看起来好像是并行运行的(实际上,它是顺序运行的)。进程之间的切换需要时间(并且会减慢程序速度)。

For more on this read about: schedulers and dispatchers

关于java - 多线程代码对于很多工作人员来说太慢,但对于很少的工作人员来说速度很快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422894/

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