2
0
mirror of https://github.com/boostorg/cobalt.git synced 2026-01-19 04:02:16 +00:00
Files
cobalt/doc/motivation.adoc
Klemens Morgenstern b807c700dc doc typo fixes
2026-01-11 07:27:47 +08:00

33 lines
1.4 KiB
Plaintext

= Motivation
Many programming languages
like node.js and python provide easy to use single-threaded concurrency frameworks.
While more complex than synchronous code,
single threaded asynchronicity avoids many of the pitfalls & overhead of multi-threading.
That is, one coroutine can work, while others wait for events (e.g. a response from a server).
This allows to write applications that *do multiple things simultaneously* on a *single thread*.
This library is meant to provide this to C++: *simple single threaded asynchronicity*
akin to node.js and asyncio in python that works with existing libraries like
`boost.beast`, `boost.mysql` or `boost.redis`.
It is based on `boost.asio`.
It takes a collection of concepts from other languages and provides them based on C++20 coroutines.
- easy asynchronous base functions, such as an async <<main, main>> & <<thread, threads>>
- <<promise, promise>> & <<generator, generator>> types
- <<op, operation wrappers>>
- an <<with, async scope>>
- <<race, race>>
- <<channel, channel>>
Unlike `asio::awaitable` and `asio::experimental::coro`, `cobalt` coroutines are open.
That is, an `asio::awaitable` can only await and be awaited by other `asio::awaitable`
and does not provide coroutine specific synchronization mechanisms.
`cobalt` on the other hand provides a coroutine specific `channel`
and different wait types (`race`, `gather` etc.) that are optimized
to work with coroutines and awaitables.