朱莉娅:有可能玩多线程

时间:2015-11-11 12:36:29

标签: multithreading julia

我和朱莉娅一起工作。

有一个网络库:ZeroMQ。

我需要的是创建一个可以接收多个零MQQ套接字的julia项目。这是一个简单的解释:

s1 = Socket();
ZMQ.bind(s1, ip1:port1);
s2 = Socket();
ZMQ.bind(s2, ip2:port2);
s3 = Socket();
ZMQ.bind(s3, ip3:port3);
ZMQ.recv(s1, msg0, 0); // it's blocking
ZMQ.recv(s2, msg1, 0); // it's blocking
ZMQ.recv(s3, msg2, 0); // it's blocking

所以这里我有三个阻塞recv,这意味着我应该为每个阻塞创建一个新线程。

但我不知道如何与朱莉娅一起玩多线程。

1 个答案:

答案 0 :(得分:4)

你不需要线程,你只需要非阻塞I / O,这在Julia中是所有I / O的工作方式,但它通过任务阻止了API。所以你需要做的是在自己的任务中接收每条消息:

@sync begin
    @async ZMQ.recv(msg0, 0);
    @asycn ZMQ.recv(msg1, 0);
    @async ZMQ.recv(msg2, 0);
end

但是,除非你从三个不同的ZMQ套接字接收,这似乎是一件奇怪的事情,因为你无论如何只能在套接字上收到一条消息,并且通过使它们异步,你不会知道哪个消息是哪个。但假设您从不同的来源获取消息,这就是您的操作方式。