我正在和 Julia 一起工作。

有一个网络库:ZeroMQ。

我需要的是创建一个可以接收多 zeroMQ 套接字的 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 ,这意味着我应该为每个线程创建一个新线程。

但我不知道如何用 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 套接字接收,否则这似乎是一件奇怪的事情,因为无论如何您只能在套接字上接收一条消息,并且通过使它们异步,您将不知道哪个消息是哪个。但假设您从不同来源接收消息,这就是您的做法。

关于multithreading - julia:可以玩多线程吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33650690/

10-13 05:55