我想在 Java 中运行 CPU 密集型并行任务,但为了避免复杂的竞争条件调试,我决定尝试异步程序模型。我有 Node.JS 的经验,我知道异步的东西是如何工作的,我了解事件循环。我想我不了解Vert.x 中的 Worker Verticles。
想象一下下面的 Java 代码有 3 个 CPU 密集型进程(方法 slowProcess())。
- 如何并行计算 a、b 和 c?
- 异步模型适合这个,还是我应该使用普通线程?
异步模型是否仅用于 I/O 操作?
public class Race { public static void main(String[] args) throws Exception { long a=0, b=0, c=0; System.out.print("starting ... "); //start the race // these 3 things should run in parallel a = slowProcess(a); b = slowProcess(b); c = slowProcess(c); // this should run after the 3 processes are finished long result =evaluate (a,b,c); System.out.print("finished : "+result); } private static long evaluate(long a, long b, long c) { return a+b+c; } private static long slowProcess(long value) { for (int j = 0; j < 200000; j++) for (int i = 0; i < 200000; i++) { value++; } return value; } }
更新/注意:这是一个简化的例子。对于这三个过程和简单的结果处理,线程连接会更好。真正的问题更复杂。我只是想知道是否有人可以将此代码转换为异步版本,或者告诉我为什么不应该使用高 CPU 负载进程来完成它,因为它们阻塞了事件队列(我认为)。