我想在Java中运行CPU密集型并行任务,但是为了避免竞争条件的复杂调试,我决定尝试使用异步程序模型。我有Node.JS的经验,我知道异步工作原理,并且了解事件循环。我认为我不了解Worker Verticles in Vert.x。
想象下面的Java代码具有3个CPU密集型进程(方法slowProcess())。
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;
}
}
更新/注释:这是一个简化的示例。对于这3个过程和简单的结果处理,线程连接会更好。真正的问题更加复杂。我只是想知道是否有人可以将此代码转换为异步版本,或者告诉我为什么不应对CPU负载过高的进程进行处理,因为它们会阻塞事件队列(我认为)。
最佳答案
这个怎么样?
收集刚刚创建的工作人员的所有结果。
那么整个图片是:
希望这会有所帮助。