2
0
mirror of https://github.com/boostorg/asio.git synced 2026-02-25 14:32:08 +00:00
Files
asio/doc/overview/model/executors.qbk
Christopher Kohlhoff 35e93e4e90 Update copyright notices.
2023-03-01 23:03:03 +11:00

56 lines
2.2 KiB
Plaintext

[/
/ Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com)
/
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
/]
[section:executors Executors]
Every asynchronous agent has an associated ['executor]. An agent's executor
determines how the agent's completion handlers are queued and ultimately run.
Example uses of executors include:
* Coordinating a group of asynchronous agents that operate on shared data
structures, ensuring that the agents' completion handlers never run
concurrently[footnote In Boost.Asio, this kind of executor is called a [link
boost_asio.overview.core.strands strand].].
* Ensuring that agents are run on specified execution resource (e.g. a CPU)
that is proximal to data or an event source (e.g. a NIC).
* Denoting a group of related agents, and so enabling dynamic thread pools to
make smarter scheduling decisions (such as moving the agents between
execution resources as a unit).
* Queuing all completion handlers to run on a GUI application thread, so that
they may safely update user interface elements.
* Returning an asynchronous operation's default executor as-is, to run
completion handlers as close as possible to the event that triggered the
operation's completion.
* Adapting an asynchronous operation's default executor, to run code before and
after every completion handler, such as logging, user authorisation, or
exception handling.
* Specifying a priority for an asynchronous agent and its completion handlers.
The asynchronous operations within an asynchronous agent use the agent's
associated executor to:
* Track the existence of the work that the asynchronous operation represents,
while the operation is outstanding.
* Enqueue the completion handler for execution on completion of an operation.
* Ensure that completion handlers do not run re-entrantly, if doing so might
lead to inadvertent recursion and stack overflow.
Thus, an asynchronous agent's associated executor represents a policy of how,
where, and when the agent should run, specified as a cross-cutting concern to
the code that makes up the agent.
[endsect]