MCPcopy Create free account
hub / github.com/Amanieu/asyncplusplus

github.com/Amanieu/asyncplusplus @v1.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2 ↗ · + Follow
362 symbols 641 edges 24 files 114 documented · 31% updated 21mo agov1.2 · 2024-10-11★ 1,41211 open issues

Browse by type

Functions 259 Types & classes 103
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Async++

Async++ is a lightweight concurrency framework for C++11. The concept was inspired by the Microsoft PPL library and the N3428 C++ standard proposal.

Example

Here is a short example which shows some features of Async++:

#include <iostream>
#include <async++.h>

int main()
{
    auto task1 = async::spawn([] {
        std::cout << "Task 1 executes asynchronously" << std::endl;
    });
    auto task2 = async::spawn([]() -> int {
        std::cout << "Task 2 executes in parallel with task 1" << std::endl;
        return 42;
    });
    auto task3 = task2.then([](int value) -> int {
        std::cout << "Task 3 executes after task 2, which returned "
                  << value << std::endl;
        return value * 3;
    });
    auto task4 = async::when_all(task1, task3);
    auto task5 = task4.then([](std::tuple<async::task<void>,
                                          async::task<int>> results) {
        std::cout << "Task 5 executes after tasks 1 and 3. Task 3 returned "
                  << std::get<1>(results).get() << std::endl;
    });

    task5.get();
    std::cout << "Task 5 has completed" << std::endl;

    async::parallel_invoke([] {
        std::cout << "This is executed in parallel..." << std::endl;
    }, [] {
        std::cout << "with this" << std::endl;
    });

    async::parallel_for(async::irange(0, 5), [](int x) {
        std::cout << x;
    });
    std::cout << std::endl;

    int r = async::parallel_reduce({1, 2, 3, 4}, 0, [](int x, int y) {
        return x + y;
    });
    std::cout << "The sum of {1, 2, 3, 4} is " << r << std::endl;
}

// Output (order may vary in some places):
// Task 1 executes asynchronously
// Task 2 executes in parallel with task 1
// Task 3 executes after task 2, which returned 42
// Task 5 executes after tasks 1 and 3. Task 3 returned 126
// Task 5 has completed
// This is executed in parallel...
// with this
// 01234
// The sum of {1, 2, 3, 4} is 10

Supported Platforms

The only requirement to use Async++ is a C++11 compiler and standard library. Unfortunately C++11 is not yet fully implemented on most platforms. Here is the list of OS and compiler combinations which are known to work.

  • Linux: Works with GCC 4.7+, Clang 3.2+ and Intel compiler 15+.
  • Mac: Works with Apple Clang (using libc++). GCC also works but you must get a recent version (4.7+).
  • iOS: Works with Apple Clang (using libc++). Note: because iOS has no thread local support, the library uses a workaround based on pthreads.
  • Windows: Works with GCC 4.8+ (with pthread-win32) and Visual Studio 2013+.

Building and Installing

Instructions for compiling Async++ and using it in your code are available on the Building and Installing page.

Documentation

The Async++ documentation is split into four parts: - Tasks: This describes task objects which are the core Async++. Reading this first is strongly recommended. - Parallel algorithms: This describes functions to run work on ranges in parallel. - Schedulers: This describes the low-level details of Async++ and how to customize it. - API Reference: This gives detailed descriptions of all the classes and functions available in Async++.

Contact

You can contact me by email at amanieu@gmail.com.

Core symbols most depended-on inside this repo

Shape

Method 193
Class 100
Function 66
Enum 3

Languages

C++100%

Modules by API surface

include/async++/task_base.h80 symbols
include/async++/task.h46 symbols
include/async++/range.h24 symbols
include/async++/when_all_any.h21 symbols
src/scheduler.cpp20 symbols
src/threadpool_scheduler.cpp19 symbols
include/async++/continuation_vector.h19 symbols
include/async++/traits.h18 symbols
include/async++/scheduler.h17 symbols
include/async++/ref_count.h16 symbols
include/async++/partitioner.h15 symbols
src/work_steal_queue.h13 symbols

For agents

$ claude mcp add asyncplusplus \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page