[/
 / Copyright (c) 2003-2022 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:higher_levels Higher Level Abstractions]

[$higher_level_model.png [width 940px]]

The asynchronous model presented in this section provides a basis for defining
higher level abstractions. Asio builds on this core model to provide additional
facilities, such as:

* I/O objects such as [link asio.overview.networking sockets] and [link
  asio.overview.timers timers] that expose asynchronous operations on top of
  this model.

* Concrete executors, such as the [link asio.reference.io_context io_context]
  executor, [link asio.reference.thread_pool thread_pool] executor, and the
  [link asio.reference.strand strand] adapter which guarantees non-concurrent
  execution of completion handlers.

* Completion tokens that facilitate different composition mechanisms, such as
  [link asio.overview.composition.cpp20_coroutines C++ coroutines], [link
  asio.overview.composition.spawn stackful coroutines], [link
  asio.overview.cpp2011.futures futures], and [link
  asio.reference.experimental__deferred deferred operations].

* High level support for C++ coroutines that combines support executors and
  cancellation slots to allow for [link
  asio.overview.composition.cpp20_coroutines.co_ordinating_parallel_coroutines
  easy coordination of concurrent asynchronous agents].

To allow users to more easily write their own asynchronous operations that
adhere to this model, Asio also provides the helper function [link
asio.reference.async_compose async_compose].

[endsect]
