gpt4 book ai didi

java - SimGrid。同时接收两个任务

转载 作者:行者123 更新时间:2023-12-01 09:56:26 25 4
gpt4 key购买 nike

platform.xml 文件中有主机功能的声明:

<host id="Tier1_1" core="2" speed="100f"/>

worker进程驻留在该主机中。Worker如何同时接收并执行两个任务(如果核心数为2)?现在我使用这样的代码,但在这种情况下不起作用(此代码不能同时接收两个任务,只能接收一个);

while(true) {
commReceived = Task.irecv("Tier1_" + num);
commReceived.waitCompletion();
if (commReceived.test()){
task = commReceived.getTask();
commReceived = null;
Msg.info("Receive " + task.getName());
task.execute();
Msg.info("End to execute " + task.getName());
}

UPD:

现在我使用这个代码。有两个进程具有相同的邮箱“Tier1_2”。我用 isend 发送至邮箱(“Tier1_2”):

    for (int j=0; j<2; j++){
Process process = new Process(getHost().getName(), "Tier1_2_" + j) {
@Override
public void main(String[] strings) throws MsgException {
while (true){
commReceived = Task.irecv("Tier1_2");
commReceived.waitCompletion();
if (commReceived.test()){
task = commReceived.getTask();
commReceived = null;
Msg.info("Receive " + task.getName());
}
}
}
};process.start();

}

但它给出了:

Exception in thread "Thread-5" java.lang.NullPointerException
at LHCb.Tier1$1.main(Tier1.java:46)
at org.simgrid.msg.Process.run(Process.java:338)

我应该如何正确地声明进程?

最佳答案

这个想法是让工作进程生成监听不同邮箱的其他进程。例如类似的东西(我还没有测试过)

for (int i = 0; i < 2; i++) {
Process p = new Process(getHost.getName(), "Tier1_" + i) {
public void main(String[] args) throws MsgException {
String mailbox = getName();
while(true) {
commReceived = Task.irecv(mailbox);
commReceived.waitCompletion();
if (commReceived.test()){
task = commReceived.getTask();
commReceived = null;
Msg.info("Receive " + task.getName());
task.execute();
Msg.info("End to execute " + task.getName());
}
}
});
p.start();
}

新的 Process() 方法有两个参数:进程运行所在的主机的名称和进程本身的名称。这里我们声明一个唯一的进程名称,它将用作邮箱名称(因此邮箱 = getName())。

不要忘记在某个时候终止这些进程,因为它们会永远运行。因此,您可能希望将所有生成的进程放入一个 vector 中以缓解这一问题。

关于java - SimGrid。同时接收两个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171836/

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