{{Short description|Software design pattern for event handling}} {{one source |date=March 2024}} '''Proactor''' is a software design pattern for event handling in which long running activities are running in an asynchronous part. A ''completion handler'' is called after the asynchronous part has terminated. The proactor pattern can be considered to be an asynchronous variant of the synchronous reactor pattern.<ref>Pattern-Oriented Software Architecture, Volume 2, Schmidt et al., Jon Wiley & Sons, Ltd, 2000</ref>

== Interaction == [[File:Proactor.VSD SequenceDiagram.png|thumb| UML Sequence diagram of Proactor |400px]] Operation specific actors: * The ''Proactive Initiator'' starts the asynchronous operation via the Asynchronous Operation Processor and defines the Completion Handler * ''Completion Handler'' is a call at the end of the operation from the Asynchronous Operation Processor * ''Asynchronous Operation'' Standardized actors * The ''Asynchronous Operation Processor'' controls the whole asynchronous operation * The ''Completion Dispatcher'' handles the call, depending on the execution environment.

==Implementations== * [http://www.boost.org/doc/libs/release/doc/html/boost_asio/overview/core/async.html Proactor and Boost.Asio] (C++) * Adaptive Communication Environment (C++) * [https://github.com/movitto/rjr RJR] (Ruby)

==See also== *Reactor pattern (a pattern that also asynchronously queues events, but demultiplexes and dispatches them synchronously)

==References== {{reflist}}

== External links == * [https://www.dre.vanderbilt.edu/~schmidt/PDF/Proactor.pdf Proactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handlers for Asynchronous Events], Irfan Pyarali, Tim Harrison, Douglas C. Schmidt, Thomas D. Jordan, 1997 (pdf 143 kB)

{{Design Patterns patterns}}

Category:Events (computing) Category:Software design patterns

{{software-eng-stub}}