В настоящем репозитории код не тестировался, определённо содержит ошибки и не предназначен для использования, но пишется для улучшения и отработки автором знания языка C++, а также служит демонстрацией применения этого знания
Учебный фреймворк для написания многопоточных масштабируемых concurrency приложений, созданный на основе выполнения заданий из курса "Теория и практика многопоточной синхронизации" за авторством Романа Липовского, MIPT
Написан с использованием C++23
- executors
- inline (выполняет задачи на месте)
- blocking static threadpool
- fast work-stealing threadpool
- strand (сериализует асинхронные задачи без блокировки)
- stackful coroutines
- stackless coroutines
- fibers
- API & implementation
- synchronization primitives
- mutex
- shared mutex
- condition variable
- wait group (позволяет дождаться окончания задач и синхронизироваться с ними)
- wait point (обобщенная wait group)
- futures support
- (go) channels for fibers (имплементация каналов из языка go)
- implementation
- select
- (functional) futures (фьючи в функциональном стиле)
- constructors (пораждают фьючи)
- contract (канал future-promise)
- value (создать готовое значение)
- just (создать готовое событие)
- failure (создать готовую ошибку)
- submit (отправить вычисление в executor и получить его будущий результат)
- combinators (преобразуют одни фьючи в другие)
- seq
- via (установить, где будет значение будет потреблено)
- inLine (использовать значение на месте)
- map (преобразовать будущее значение)
- flatten (получить фьючу, которая сама представлена будущим значением)
- flatMap (map + flatten)
- andThen (асинхронный try)
- orElse (асинхронный catch)
- par
- first (получить первое значение или последнюю ошибку)
- all (получить все значения или первую ошибку)
- seq
- terminators (поглощают фьючи)
- apply (установить способ использования будущего значения)
- get (синхронно дождаться будущего значения)
- detach (сбросить будущее значение)
- constructors (пораждают фьючи)
- C++23
- gcc (trunk)
- x86-64/sysv/elf
- POSIX
Для отключения отладочных проверок внутри фреймворка необходимо передать флаг
-DUTILS_DISABLE_DEBUG
- concurrency - библиотека средств синхронизации потоков
- context - контекст исполнения для stackful корутин/файберов
- result - упрощенная реализация C++23 std::expected для представления значения или пойманного исключения (value or std::exception_ptr)
- utils - std-like библиотека общих утилит
В настоящем репозитории код лицензирован под GNU General Public License v3.0. Дополнительная информация доступна по адресу https://www.gnu.org/licenses/