Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 朱莉娅:可以玩多线程吗_Multithreading_Julia - Fatal编程技术网

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
所以这里我有三个blocking
recv
,这意味着我应该为它们中的每一个都有一个新线程。


但是我不知道如何与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。