Перейти к содержанию

Concurrency

Многопоточность и асинхронность — основа любого современного backend'а. Этот раздел покрывает полный спектр: от создания pthread'а через clone(2) до lock-free структур и C++20 coroutine'ов; от классических примитивов синхронизации (mutex, semaphore, condition_variable) до эволюции серверных моделей (синхронный → thread pool → epoll → io_uring).

Раздел построен по программе курса CAOS — каждая тема разобрана с механикой «под капотом»: как mutex реализован через futex, как std::shared_ptr делает atomic refcount, как scheduler фибр прячет stack switching за yield().

Темы

Страница Что рассматривается
Потоки (основы) std::thread, join/detach, RAII, TLS (__thread, pthread_key_create), модели TLS, std::jthread (C++20)
Реализация потоков (clone) clone(2), флаги CLONE_*, thread group, TID/TGID, tgkill
Синхронизация: мьютексы, семафоры, futex Race conditions, deadlock, std::mutex, POSIX semaphores, устройство futex, 3-state mutex (OneShot), cv через futex со счётчиком поколений, spurious wakeups
C++ примитивы синхронизации shared_mutex, recursive_mutex, unique_lock, shared_lock, scoped_lock, std::lock, counting_semaphore, семафор через cv
Thread pool Blocking queue через cv, реализация ~60 строк, submit с future через packaged_task, work-stealing, sizing (CPU/IO-bound, Little's law)
Atomic операции и memory model LOCK prefix, C11/C++11 atomics, memory ordering (relaxed/acquire/release/seq_cst), CAS, ABA, spinlock, SPSC queue, store buffering на x86 TSO, Dekker's algorithm
Lock-free структуры Progress guarantees (lock-free vs wait-free), Treiber stack, Michael-Scott queue, hazard pointers, RCU, epoch-based reclamation, std::atomic_shared_ptr
TCP servers: эволюция моделей Sync single-thread → thread-per-connection → thread pool → non-blocking + busy-loop → segue к epoll/io_uring, сравнение моделей
Future и Promise Callback hell vs continuations, std::future/std::promise, std::async, std::packaged_task, shared state implementation, .then/when_all/when_any, folly/concurrencpp/P2300
setjmp/longjmp и ucontext jmp_buf layout, реализация в glibc, sigsetjmp, ucontext, scheduler-based fiber, fault injection (Loom/Shuttle), stackful vs stackless coroutines, C++20 co_await
Fibers: stackful coroutines Boost.Context jump_fcontext (asm x86-64), make_fcontext, scheduler, work-stealing deque, M:N модель, guard pages, Go/Tokio/Loom
C++20 coroutines (stackless) Compiler transformation в state machine, promise_type, awaitable/awaiter, Generator/Task реализация, symmetric transfer, HALO, cppcoro/folly::coro/stdexec