Alan Conway created PROTON-1344:
-----------------------------------

             Summary: Provide C "proactor" API for multi-threaded proton 
applications
                 Key: PROTON-1344
                 URL: https://issues.apache.org/jira/browse/PROTON-1344
             Project: Qpid Proton
          Issue Type: Improvement
            Reporter: Alan Conway
            Assignee: Alan Conway


This work will pull together work that has been going on with the experimental 
pn_connection_engine_t and work on a new C multi-threaded libuv C driver. This 
work has matured to the point of putting together a coherent and complete 
pn_proactor API to (eventually) replace the pn_reactor.

The big differences:

- proactive not reactive: e.g. void proactor_connect() does not return a bound 
connection, it starts an asynchronous connection process. All results are 
reported asynchronously as events, not as synchrouns return values.

- application controls threading: application thread(s) call wait() to block 
for events. There are no callbacks to application code from unknown threading 
contexts.

- enforces threading model to ensure that events from one connection engine are 
only handled in one thread at a time. The application does not need locks to or 
tables to manage this.

- provides simple inter-thread singalling - any thread can "wake" a connection, 
causing the proactor to return an event in a thread-safe way for  
application-triggered work.

The big similarities: 

Same proton protocol engine API is unchanged - the pn_connection_engine will 
dissappear as a separate entity but it's functions will be folded back into 
pn_connection and pn_transport.

Same event model: existing code that processes events is unchanged, instead of 
registering `void my_handler(pn_event_t *)` with the reactor, the application 
calls my_handler(pn_driver_wait()) in its own threads. There will  be a handful 
of new proactor-related events.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to