On Sun, 2015-07-12 at 09:14 +0100, Fraser Adams wrote:
> 
> As I say I think that ActiveMQ Apollo started out because of scaling 
> limitations of the original ActiveMQ and has evolved to a reactor 
> based 
> threading model built on hawt-dispatch (Java implementation of Grand 
> Central Dispatch https://en.wikipedia.org/wiki/Grand_Central_Dispatch
> ) - 
> so a task parallel threading model rather than a shared state 
> threading 
> model. Given that the Proton reactor stuff seems to be, well, a 
> reaction 
> :-[ to this problem space it got me curious about the Qpid brokers.

The proton reactive APIs are an attempt to find an API that works well
for servers AND clients. Procedural APIs are good for clients but
problematic on brokers which must "react" to unpredictable client
activity. This aspect is not really related to performance.

The proton engine is a single-threaded event processing state machine.
To scale across cores you need to use epoll or similar to dispatch from
a large number of connections to to a small thread pool that serializes
work to each proton engine. That is exactly what qpidd and dispatch do.

The proton C reactor also has events that can hook directly into epoll
or select, e.g. accepting incoming connections. This is useful for
writing portable (i.e. epoll/select agnostic) *singe threaded* servers,
but it doesn't help with multi-core. 

I'm not sure yet if the C reactor can/should be extended to multi-core 
or if concurrency support belongs in the language binding layer. This
is especially true of languages like Go with built-in concurrency
support. See http://qpid.apache.org/proton/go/ for more




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org

Reply via email to