gpt4 book ai didi

java - 使用 ExecutorService 并行化循环来执行任务

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:49 30 4
gpt4 key购买 nike

我有一个迭代 10 次的循环,每次都会执行一些相关的方法。那么是否有任何解决方案可以为该循环的每个实例并行执行相同的任务。

1st core should execute the program for i=0,1,2,3
2nd core should execute the program for i=4,5
3rd core should execute the program for i=6,7
4th core should execute the program for i=8,9

假设我有 4 个核心

最佳答案

I have a loop which iterate for 10 times and in each time it executes some interrelated methods.So is there any solution that can do the same task parallaly for each instance of that loop.

首先要认识到的是,除非您使用第 3 方库,否则您无法对任务到核心映射进行特定控制。一般来说,无论如何您都不想这样做——只是让 JVM 聪明地处理它。

要利用硬件上的所有核心,通常需要更改固定线程池中的线程数。您可以使用缓存的线程池,这将根据提交到 ExecutorService 的任务数量来增加任务。在现代 JVM 和操作系统上,不用担心抖动,因此除非您正在谈论数千个任务,否则这种方法很有效。

但通常我会在池中设置固定数量的线程。如果任务是 100% CPU 限制,那么我可以设置线程数以匹配 JVM 拥有的虚拟处理器的数量。通常,对于日志输出、网络事务和其他 IO,您可能需要增加线程数才能利用所有处理器。我会使用不同的值运行您的程序几次。

在您的情况下,您似乎希望专门在一个线程中运行作业 0,1,2,3,而 4,5 在另一个线程中并行运行(希望如此)。要完成此任务,您应该向 ExecutorService 提交 4 个任务,并让每个任务运行您想要的迭代次数。

也许是这样的:

 executorService.submit(new MyTask(new int[] { 0, 1, 2, 3}));
executorService.submit(new MyTask(new int[] { 4, 5 }));

如果线程映射的数量是任意的,那么我只需向 ExecutorService 提交 10 个任务,它就会以 FIFO 方式并行运行这些任务。

关于java - 使用 ExecutorService 并行化循环来执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998701/

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