[zeromq-dev] sending from multiple threads

Luca Boccassi luca.boccassi at gmail.com
Thu Dec 1 18:19:30 CET 2016

On Thu, 2016-12-01 at 10:23 -0500, Lineker Tomazeli wrote:
> Hi guys,
> I have been reading zeromq list for a while now but is the first time I'm
> asking something. So nice to meet you all :)
> In the zeromq documentation/book is very clear that we shouldn't be
> handling zeromq sockets from multiple threads without doing a memory
> barrier.
> *First question:*
> What is the recommended pattern to have one thread responsible for
> connecting, binding and polling messages from sockets. And have multiple
> thread sending messages.
> My first approach was to have a threadsafe producer/consumer queue where
> sender threads would push on the queue and the "zeromq" thread would pick
> from queue and send through the wire. This works but I find it redundant
> and memory inefficient.
> My second approach (on which I used netmq) was to schedule a "send a
> message" task on the Poller. This guaranteed that the task ran in the same
> thread as the poller.
> What would be the correct approach if I use clrzmq4 ?

Why do you want to manage the socket on one thread and use from another?
What about just passing the endpoint string to each thread, so that they
can manage their own socket?

> *Second question :*
> What is the correct approach for a "zeromq" thread to notify other threads
> that I new message was received ?
>  - raise an event on another thread?
>  - use a threadsafe producer/consumer queue to dump receiving message ?

For inter-thread communication you could use an inproc:// endpoint,
which is essentially a lock-less in-memory queue. You can build any
model you want with it as a communication channel between threads. And
given they all take zmq_msg_t, you can just pass them along directly.

If the tasks to distribute are all equal in cost/time, a simple and
common pattern is to use a round-robin type of socket to distribute
work. There are a lot of examples and suggestions in the zguide.

> *Third question:*
> Zeromq is truly a great and fun framework to work with. I was wondering why
> there not so much buzz about it? Do you know companies using in production?

Many companies do. We use it at Brocade in the vRouter, for example.

Kind regards,
Luca Boccassi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20161201/48c7adef/attachment.sig>

More information about the zeromq-dev mailing list