[zeromq-dev] c++ api issues
Martin Sustrik
sustrik at 250bpm.com
Wed Oct 20 14:09:14 CEST 2010
On 10/20/2010 01:56 PM, Burak Arslan wrote:
>> How would you implement the copy constructor?
> is this a rhetorical question? from what i see, a regular deep-copying
> copy ctor would do the job. but i'm not familiar enough with 0mq
> internals to confidently answer it.
>
> if that does not do the job, just documenting the reason would "fix" my
> problem.
>
> c++ users are expected to know about argument passing semantics. if the
> sole reason is to protect the user (which is what the inline
> documentation suggests), i think that restriction should be lifted as it
> prevents some simple (yet less efficient) use cases.
Ok. So, copying message using zmq_msg_copy uses an atmoic operation
which is *slow*. The intent is to be able to reference a message from
several threads at once.
However, STL containers assure that the items stored are accessed from
at most one thread at a time. Thus, the atomic operation is not needed.
In theory we can solve this by creating a proxy object that would handle
all the message references from the single thread. (I.e. message_t would
reference the proxy object that would hold the "thread-local" reference
count, which in turn would reference the shared buffer, that holds the
global (atomic) reference count.
The problem is that you have to allocate the proxy object. Which is even
slower than an atomic op.
I see no real way out.
However, what you can do is to write a simple wrapper that would use
zmq_msg_copy in copy constructor and provide that to be used by those
who care about storing messages in containers more than about extreme
performance.
> as for other points, should i file issues? are they already done? in
> which release are they going to be?
Feel free to submit a patch. It won't break anything so I'll just apply
it straight away.
Martin
More information about the zeromq-dev
mailing list