#### Higher Level Abstractions

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 sockets and timers that expose asynchronous operations on top of this model.
- Concrete executors, such as the io_context executor, thread_pool executor, and the strand adapter which guarantees non-concurrent execution of completion handlers.
- Completion tokens that facilitate different composition mechanisms, such as C++ coroutines, stackful coroutines, futures, and deferred operations.
- High level support for C++ coroutines that combines support executors and cancellation slots to allow for 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 async_compose.