Skip to content

ddvamp/exe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

exe

Contents

Disclaimer


В настоящем репозитории код не тестировался, определённо содержит ошибки и не предназначен для использования, но пишется для улучшения и отработки автором знания языка C++, а также служит демонстрацией применения этого знания


About

Учебный фреймворк для написания многопоточных масштабируемых concurrency приложений, созданный на основе выполнения заданий из курса "Теория и практика многопоточной синхронизации" за авторством Романа Липовского, MIPT

Написан с использованием C++23

Structure

  • executors
  • stackful coroutines
  • stackless coroutines
  • fibers
  • (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 (получить все значения или первую ошибку)
    • terminators (поглощают фьючи)
      • apply (установить способ использования будущего значения)
      • get (синхронно дождаться будущего значения)
      • detach (сбросить будущее значение)

Requirements

  1. C++23
  2. gcc (trunk)
  3. x86-64/sysv/elf
  4. POSIX

Configuration

Для отключения отладочных проверок внутри фреймворка необходимо передать флаг

-DUTILS_DISABLE_DEBUG

Third-party libraries

  • concurrency - библиотека средств синхронизации потоков
  • context - контекст исполнения для stackful корутин/файберов
  • result - упрощенная реализация C++23 std::expected для представления значения или пойманного исключения (value or std::exception_ptr)
  • utils - std-like библиотека общих утилит

License

В настоящем репозитории код лицензирован под GNU General Public License v3.0. Дополнительная информация доступна по адресу https://www.gnu.org/licenses/

Links