[zeromq-dev] [PATCH] reduce memory allocations in yqueue

Martin Sustrik sustrik at 250bpm.com
Thu Feb 4 09:28:17 CET 2010


Steven McCoy wrote:
> On 3 February 2010 23:53, Joe Thornber <joe.thornber at gmail.com 
> <mailto:joe.thornber at gmail.com>> wrote:
> 
>     It reduces memory allocation in yqueue by holding onto one unused
>     chunk rather than handing it back to the global new/delete allocators.
>      For the common case where messages are being produced at a similar
>     rate to consumption this is a big win.
> 
> 
> Why would you do this instead of just doubling N, there already is one 
> chunk in the container?

yqueue is not a cyclical buffer. Instead it allocates chunks on the 
writer side and decallocates them on the reader side. Thus, however 
large the chunk, it's still going to be allocated/deallocated every now 
and then.

What Joe did is optimising the mechanism of handing the used chunks from 
the reader thread back to the writer thread. Instead of free/malloc pair 
single chunk can be moved using atomic ops. Interestingly, this 
mechanism is used exclusively (i.e. no malloc/free altogether) when the 
system is not fully loaded and messages are just passing through the queue.

Martin



More information about the zeromq-dev mailing list