我正在使用 MPJ 构建一个简单的分布式应用程序(基本上是另一个生产者/消费者问题),并且在使用多个线程时从同一台机器接收数据时遇到了巨大问题。
示例代码:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int[] buf = new int[2];
MPI.COMM_WORLD.Recv(buf, 0, 2, MPI.INT, MPI.ANY_SOURCE, 1);
System.out.println("Got: " + buf[0]);
}
});
t.start();
Thread.sleep(100);
MPI.COMM_WORLD.Isend(new int[] {1,0}, 0, 2, MPI.INT, MPI.COMM_WORLD.Rank(), 1);
Thread.sleep(100);
t.join();
想法很简单:一个线程监听所有机器并接受来自 a) 不同机器的请求(这工作正常) b) 同一台机器上的不同线程 - 这仅适用于多核模式。
有没有办法让它在集群配置中工作?
如果这是不可能的,那么至少有一种方法可以在某些事件(终止检测)之后正确退出侦听器线程而无需忙于轮询吗?(Request.Cancel 显然没有在 v0.43 中实现-_-)
谢谢