多线程代码太慢,工作线程很多,但速度快,很少



我写了一个代码来加速蛮力算法,我决定使用多线程。虽然我是多线程的新手,而且我知道通过创建大量的worker(线程(池,并将作业分配给它们,蛮力应该非常快。好吧,我下面的代码在工作线程很少(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 的评论,当您并行运行进程时,处理器实际上可以并行执行的数量有限。当使用小于或等于计算机数量数量的线程数时,处理器理论上可以(如果没有赋予其他任务(同时运行代码。但是,在此之上,处理器必须开始在线程之间来回切换,以使其看起来好像程序正在并行运行(而实际上,它是按顺序运行的(。进程之间的这种切换需要时间(并且会减慢程序的速度(。

有关此内容的更多信息,请阅读: 调度程序和调度程序

相关内容

最新更新