beman.execution26
provides the basic vocabulary for asynchronous
programming as well as important algorithms implemented in terms
of this vocabulary. The key entities of the vocabulary are:
scheduler
used to control where operations are executed.- The key operation is
schedule(scheduler) -> sender
.
- The key operation is
sender
used to represent work.- The key operation is
connect(sender, receiver) -> operation-state
.
- The key operation is
receiver
used to receive completion notifications.- There are multiple operations on receivers:
set_value(receiver, args...)
for successful completions.set_error(receiver, error)
to report errors.set_stopped(receiver)
to report cancellation.
- There are multiple operations on receivers:
operation-state
to represent a ready to run work graph .- The key operation is
start(state)
.
- The key operation is
Using these operations some fundamental algorithms are implemented, e.g.:
just(args...)
as the starting point of a work graph without a specified scheduler`.let_value(sender, fun)
to produce a sender based onsender
's results.on(scheduler, sender)
to executesender
onscheduler
.transfer(sender, scheduler)
to complete with withsender
's results onscheduler
.when_all(sender ...)
to complete when allsender
s have completed.bulk(...)
to executed execute work, potentially concurrently.
Implements: std::execution
(P2300).
There are plenty of things which need to be done. Some of these are listed in the issues section. Other contributions are, of course, also welcome. Aside from contributing code the project welcomes reports on usage experience, code reviews, defect reports, features requests, etc. There are plenty contribution opportunities.
If you want to contribute, you won't be left alone! Please e-mail Dietmar Kühl if you want help or mentoring for contributing to the library.
Library | Linux | MacOS | Windows |
---|---|---|---|
build |
The following instructions build the library and the examples:
cmake -B build
cmake --build build
The implementation compiles and passes tests using clang, gcc, and MSVC++.
<stop_token>
example: Compiler Explorer