Multithreading 朱莉娅:可以玩多线程吗
我和朱莉娅一起工作。Multithreading 朱莉娅:可以玩多线程吗,multithreading,julia,Multithreading,Julia,我和朱莉娅一起工作。 有一个网络库:ZeroMQ。 我需要的是创建一个julia项目,它可以接收多个zeroMQ套接字。这里有一个简单的解释: 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,
有一个网络库:ZeroMQ。
我需要的是创建一个julia项目,它可以接收多个zeroMQ套接字。这里有一个简单的解释:
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
所以这里我有三个blockingrecv
,这意味着我应该为它们中的每一个都有一个新线程。但是我不知道如何与Julia一起玩多线程。你不需要线程,你只需要非阻塞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套接字接收消息,否则这似乎是一件奇怪的事情,因为您无论如何只能在套接字上接收一条消息,并且通过使它们异步,您将不知道哪条消息是哪条消息。但是,假设您从不同的来源收到消息,您就是这样做的。事实上,我有三个不同的套接字。您的意思是我可以使用多线程+阻塞来实现我的目标?谢谢,它可以工作,但我想使用单线程+非阻塞。如果“它是用阻塞API公开的”,我想我别无选择。谢谢你,伙计,我不明白。因为对我来说,它看起来像一个多线程。如果你想的话,你可以这样想,但是只有一个内核线程,使用非阻塞I/O。如何。但不,实际上是协同程序和libuv。