[Ace-users] [ace-users] Basic Reactor concepts
Douglas C. Schmidt
schmidt at dre.vanderbilt.edu
Wed Feb 20 14:00:29 CST 2008
Hi Folks,
> The assumption about a Reactor's purpose is correct, but your example adds another layer of complexity. A Reactor
> processes events, not queues.
Even more specifically, a Reactor's "synchronous event demuxer" waits on
set of handles. These handles are triggered by so-called "indication
events" when there's something for the reactor to process. Examples of
said handles would be sockets, file descriptors, terminal handles, etc.
> It dispatches the handling of these 'events' to (of course) Event
> Handlers. Your example cites queues with each queue possibly
> containing events that need processed. But the events that are placed
> in the queues are not the "events" that the Reactor would process.
> The Reactor 'event' in this case is the fact that a queue needs
> serviced. This might be handled by a counting semaphore tied to each
> queue, with the semaphores themselves somehow registered with the
> Reactor (this is a good fit for how things work on Windows with
> WaitForMultipleObjects (the ACE_WFMO_Reactor) -- I'm not sure how well
> it extends to ACE Reactors that use select() under the hood).
It gets ugly fast ;-)
> Now we get to the second part of the assumption: The "...process them [events] in a different thread" part is an example
> of what you can do with a Reactor *framework*, but it doesn't define how a Reactor works. Dispatching events to your own
> worker threads is not built into the Reactor itself. That would be the job of the Handler -- it's up to your Handlers to
> dispatch the events to the worker threads. So your Handler would extract the latest entry in the queue that was signaled
> to wake the Reactor, then pass that entry off to (possibly) some other queue leading to a worker thread pool.
Right, which is what the "request queue" does in the
Half-Sync/Half-Async pattern!
Doug
More information about the Ace-users
mailing list