Lineker Tomazeli
2016-12-01 15:23:46 UTC
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 ?
*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 ?
*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?
Lineker Tomazeli
tomazeli.net
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 ?
*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 ?
*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?
Lineker Tomazeli
tomazeli.net