[zeromq-dev] Multithreaded ZeroMQ servers

Tom Quarendon tom.quarendon at teamwpc.co.uk
Mon Jan 4 14:29:59 CET 2016


Ah, sorry. C++

-----Original Message-----
From: zeromq-dev-bounces at lists.zeromq.org [mailto:zeromq-dev-bounces at lists.zeromq.org] On Behalf Of Pieter Hintjens
Sent: 04 January 2016 12:02
To: ZeroMQ development list <zeromq-dev at lists.zeromq.org>
Subject: Re: [zeromq-dev] Multithreaded ZeroMQ servers

Tom, what language are you working in?

On Mon, Jan 4, 2016 at 12:48 PM, Tom Quarendon <tom.quarendon at teamwpc.co.uk> wrote:
> I’m confused about writing multithreaded servers with ZeroMQ.
>
> I have read the ZeroMQ guide and there’s a section “Multithreading 
> with ZeroMQ” that has a description of how to write a multithreaded 
> Hello World server.
>
>
>
> However there appears to be an assumption that the “work” of each 
> request takes essentially the same amount of time. That is, the 
> requests are dealt out to the workers with a dealer socket, and so the 
> requests are just dealt out round robin aren’t they? So if one request 
> takes a long time, you could get into the situation that it ends up 
> with lots of requests queued up behind it for that worker, and all the 
> other workers are idle. That doesn’t seem right to me. But I may be misunderstanding how it works.
>
>
>
> In my mind what you want to be able to do is somehow have all of the 
> threads read from the same socket, or bind to the same external 
> endpoint, so that the each time a worker does a recv it gets the next 
> message that is in the input queue. Either that or you would appear to 
> need each worker to disconnect from the inproc socket each time it has 
> received a request to process so that it doesn’t get dealt any more, 
> and then reconnect when it has finished, but that feels like it might be undesirably inefficient.
> Either that or I have to have a big lock and memory fence around the 
> input socket and just have each thread block waiting for the mutex and 
> then reading the next message.
>
>
>
> What I seem to want to end up doing is writing my own simple thread 
> safe in-process queue that I can just put the requests on to and have 
> all of the worker threads read from. However I’d like to use ZeroMQ if 
> I can, I just can’t work out how to.
>
>
>
> What am I missing?
>
> Thanks.
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
_______________________________________________
zeromq-dev mailing list
zeromq-dev at lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev


More information about the zeromq-dev mailing list