我和朱莉娅一起工作。
有一个网络库: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
,这意味着我应该为每个阻塞创建一个新线程。
但我不知道如何与朱莉娅一起玩多线程。
答案 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套接字接收,这似乎是一件奇怪的事情,因为你无论如何只能在套接字上收到一条消息,并且通过使它们异步,你不会知道哪个消息是哪个。但假设您从不同的来源获取消息,这就是您的操作方式。