模拟网格。如何在执行任务时接收和发送数据?

SimGrid. How to receive and send data while executing task?

模拟以下情况应该用什么方法或思路。

有master、worker1(主机1)和worker2(主机2)。 当前 worker1 正在执行一些数据,但是 worker2 是空闲的。 Master必须向worker2发送instruction关于从worker1下载数据并开始执行它们。

想法是从 master 发送 messageTask 到 worker2 --> worker2 发送 messageTask 到 worker1 --> worker1 发送 task(name, flopsamount, byteSize) 到 worker2 --> worker2 接收并执行它。

但是如果worker1忙于执行他的task,worker1如何从worker2接收messageTask? worker1 在执行任务时如何发送数据?或者worker2有其他方法可以从繁忙的worker1下载数据吗?

已更新 这是worker2的一段代码。

MessageTask messageTask = new MessageTask();
messageTask.dsend(mailbox_worker1)

对于工人 1

try {
    task.execute(); // Currently worker1 is here, in other words, worker1 is exectuing some another task
} catch (TaskCancelledException e) {
}

worker1 如何将 receive messageTask 和 send 返回给 worker2 真实数据(不中断当前任务的执行)?

已更新

是否正确deployment.xml?

  <process host="Tier1_1" function="LHCb.Process1">
     <argument value="1"/>  <!-- Input mailbox -->
  </process>

  <process host="Tier1_1" function="LHCb.Process2">
     <argument value="1"/>  <!-- Input mailbox -->
  </process>

至少有两种方法可以在交流时做事。您可以使用分离发送,这意味着您不关心通信是否有效,也可以使用异步通信。

本目录中有第一种机制的示例:examples/java/async/dsend,而另一种机制尚未在Java中示例。您现在必须检查 C 示例。

现在,在更新的部分中,您想在执行某事的同时做一些事情。由于(目前)还没有异步执行,您将不得不在同一台主机上启动另一个进程来处理通信,而第一台主机正在计算内容。