You are viewing a plain text version of this content. The canonical link for it is here.
Posted to proton@qpid.apache.org by Michael Goulish <mg...@redhat.com> on 2013/03/11 16:42:33 UTC

messenger threading considerations

Please Note - 

I thought that a document like this would be worthwhile 
at least to stimulate discussion, and to make sure that 
we all have a common understanding of this issue.

I personally had a limited understanding of this topic, 
before having conversations, which I may not have fully
understood or accurately rendered.

I will alter this doc to make it more accurate & complete based
on discussion on this list.  Since this doc seems likely to 
change greatly & rapidly as a result of discussion, I have not 
checked it in to the source tree yet.





Proton Messenger Threading Considerations
==================================================

_as of version 0.4_

Proton Messenger is unthreaded, and thus can easily be 
integrated into any pthread-based threading model that
the application developer chooses.

However some of the I/O calls that can be made with
Messenger will block, waiting for messages to arrive or
be sent.  In 'greenthread' environments that emulate
multithreading within a single OS-native thread, blocking
calls will block the entire application.

A possible future direction for Proton would allow the
application to substitute its own driver, and would make
the Messenger library driver-agnostic.  This would allow
the implementation of greenthread-friendly Messenger-based 
applications.





Re: messenger threading considerations

Posted by Alan Conway <ac...@redhat.com>.
On 03/11/2013 11:42 AM, Michael Goulish wrote:
>
> Please Note -
>
> I thought that a document like this would be worthwhile
> at least to stimulate discussion, and to make sure that
> we all have a common understanding of this issue.
>
> I personally had a limited understanding of this topic,
> before having conversations, which I may not have fully
> understood or accurately rendered.
>
> I will alter this doc to make it more accurate & complete based
> on discussion on this list.  Since this doc seems likely to
> change greatly & rapidly as a result of discussion, I have not
> checked it in to the source tree yet.
>
>
>
>
>
> Proton Messenger Threading Considerations
> ==================================================
>
> _as of version 0.4_
>
> Proton Messenger is unthreaded, and thus can easily be
> integrated into any pthread-based threading model that
> the application developer chooses.
>
> However some of the I/O calls that can be made with
> Messenger will block, waiting for messages to arrive or
> be sent.  In 'greenthread' environments that emulate
> multithreading within a single OS-native thread, blocking
> calls will block the entire application.
>
> A possible future direction for Proton would allow the
> application to substitute its own driver, and would make
> the Messenger library driver-agnostic.  This would allow
> the implementation of greenthread-friendly Messenger-based
> applications.
>

N that proton is not special in regard to green threads, any library with 
blocking calls would be the same. The important thing is to document which calls 
can block and when, which you're doing in another thread.

I'd add a word on thread safety: Messenger instances are not thread safe, so the 
application must takes steps (mutex locks etc.) to ensure no concurrent function 
calls _with the same pn_messenger_t pointer parameter_. However calls on 
_different_ messenger instances _are_ thread safe, so a multithreaded 
application can use multiple messangers concurrently

Effecively what this is saying is that the messenger library doesn't have any 
global variables used in calls that take a pn_messenger_t (it doesn't does it?)

Cheers,
Alan.