Этому курсу уже 15 лет, я обновляю его каждый год, и за это время он стал самым крупным и полным сборником знаний об асинхронном программировании. В интернете полно устаревших материалов по JavaScript, и даже то, как люди писали асинхронный код 5–7 лет назад, уже мало похоже на современные практики. В открытом доступе есть все материалы, записанные до 2020 года: открытый курс сообщества Metarhia по асинхронному программированию. Старый курс стал слишком громоздким, но его материалы также включены в этот курс как дополнительные и исторические, поскольку поддержку легаси никто не отменял.
- Обзор контрактов и абстракций
- Обзор асинхронного программирования на украинском языке
- Обзор параллельного программирования
Следует также отметить, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код на системном уровне. Что касается системного уровня, то здесь необходимо использовать теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции).
Акцент на практическом применении (примеры кода из реальных проектов)
- Актуальность и соответствие стандартам по состоянию на 2023–2026 годы
- Задачи и разбор их решений, семинары, ревью кода (курс — это не только видео)
- Рекомендации по выбору стиля и абстракций асинхронности в зависимости от задачи
- Внимание к корректной обработке ошибок во всех стилях асинхронности
- Акцент на надёжность, поддерживаемость, тестируемость, снижение зацепления
- Примеры и задачи по исправлению скрытых проблемных состояний и гонок данных
Что нужно знать и уметь на входе:
- Синтаксис JavaScript без всяких хитростей
- Уверенно владейте git, у вас должен быть аккаунт на github
- Любая среда разработки, IDE или редактор
Чем этот курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастер-класс, не стрим. Новый курс — это максимально концентрированная информация и практические задания как для прикладного, так и для системного программирования со сравнением этих подходов.
Содержание:
- Контракты асинхронности на базе callback
- Минимально необходимое понимание рантайма
- Паттерны Actor, Reactor, Proactor
- Контракты на базе событий
- Абстракция потоков Stream
- Контракт Thenable
- Контракт Promise
- Контракт асинхронных функций async/await
- Контракт сигналов Signals
- Обработка ошибок
- Асинхронная очередь AsyncQueue
- Асинхронный пул AsyncPool
- Асинхронная коллекция Collector
- Паттерн «цепочка ответственности»
- Конвертеры контрактов asyncify, callbackify
- Предотвращение состояния гонки
- Async Generator и Async Iterator
- Абстракции портированные из параллельного программирования
- Абстракции параллельного программирования
- Асинхронная композиция compose callbacks & async compose
- Асинхронность на потоках событий RxJS
- Модель акторов actor model
- Функциональное асинхронное программирование, контракт Future
- Асинхронность на синхронных генераторах function*/yield
- Контракты семейства Deferred
- Async.js
- Коллекция асинхронных абстракций Metasync
- Трекинг асинхронных контекстов
- Принципы и паттерны
Программа курса
Контракты асинхронности на базе callback
- Контракты Callback и Callback-last-error-first
- Примеры кода
- Задания по колбекам и созвон с разбором заданий
- Функции высшего порядка, колбеки, события на JavaScript
- Асинхронное программирование на callback`ах в JavaScript
- V8: оптимизируем возврат из функции в JavaScript через return, resolve, callback — Деми Мурыч
Минимально необходимое понимание рантайма: Event loop, I/O, таймеры
- Фазы Event-loop в V8 и Node.js
- Стрим с разбором Event loop и асинхронности
- Примеры кода
- Задания по таймерам
- Event loop, асинхронность, таймеры, колбеки, промисы, async/await
- Асинхронное программирования в JavaScript, Node.js: callback, promise, thenable, async/await
Паттерны Actor, Reactor, Proactor
- Паттерны Actor, Reactor, Proactor
- Actor + Actor Compose (композиция актора и состояния)
- Паттерн Reactor (реактор): как устроен Event Loop в Node.js
- Паттерн Proactor
- Семинар: Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript
Контракты на базе событий
- События: EventTarget, EventEmitter
- GoF Pattern Observer
- Примеры кода по событиям
- Задания по событиям
- EventEmitter из старой лекции
- Примеры кода из старой лекции по EventEmitter
- Code review: Observable, EventEmitter, EventTarget
Абстракция потоков Stream
- Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure
- Web Streams — браузерное API для потоков событий
- Примеры кода
- Паттерн открытый конструктор (Revealing Constructor)
- Примеры кода
- Потоки (Streams) в Node.js
- HTTP сервер в Node.js, req, res, сокеты и потоки (streams)
Контракт Thenable
- Контракт Thenabe
- Thenable из старой лекции
- Thenable и легковесный await
- Примеры кода
- Задания по Thenabe и созвон с разбором заданий
Контракт Promise
- Promise: then/catch/finally и методы класса all, allSettled, race, any
- Асинхронность на промисах из старой лекции
- Примеры кода
- Задания по Promise и созвон с разбором заданий
Контракт асинхронных функций async/await
- Асинхронные функции
- Асинхронные функции из старой лекции
- Примеры кода
- Задания по async/await
Контракт сигналов Signals
- Сигналы: signal, computed, effect
- Примеры кода
- Задания по сигналам
Обработка ошибок, их выявление и решение проблем со стекрейсом
- Обработка ошибок, логирование и аггрегирование
- Семинар: Errors, exceptions, operational, soft, hard, recovery, logging
- Реализация Graceful shutdown в Node.js, unhandled exceptions, async stack trace
- Обработка ошибок из старой лекции
- Asyns stask trase
- Graceful shutdown
- Примеры кода
- Задания по обработке ошибок
Асинхронная очередь AsyncQueue
- Семинар: Асинхронная очередь — AsyncQueue, ConcurrentQueue
- Node.js Queue optimized for JavaScript V8: Circular Buffer, Unrolled List, Unrolled Queue
- Конкурентная асинхронная очередь из старой лекции
- Примеры кода
Асинхронный пул AsyncPool
- Паттерн Factory Method
- Паттерны: Object Pool, Factory
- Асинхронный Pool
- Семинар: Creator, Factory, Factory Method, Object Pool
- Асинхронный пул для worker thread pool в Node.js
- Фабрики и пулы объектов в JavaScript, factorify, poolify
- Примеры кода: Factory, Factory Method
- Примеры кода Pool, AsynsPool
Асинхронная коллекция Collector
- Асинхронные коллекции (собираем значения до готовности)
- Асинхронные коллекторы данных
- Примеры кода
Паттерн «цепочка ответственности»
- Pattern: Chain of responsibility
- Примеры кода
Конвертеры контрактов asyncify, callbackify
- GoF Patterns: Adapter
- Асинхронные адаптеры
- Семинар по адаптерам для Node.js и асинхронного программирования
- Node.js ревью кода promisify — Тимур Шемсединов и Деми Мурыч
- Асинхронные адаптеры из старой лекции
- Примеры кода
Предотвращение состояния гонки по данным и управлению в асинхронном коде
- Отмена асинхронных операций: AbortController, AbortSignal
- Документация на MDN
- Async Generator и Async Iterator
- Generator, iterator, iterable
- Async generator, Async iterator, Async iterable
- Генераторы и асинхронные генераторы из старой лекции
- Генераторы
- Асинхронные генераторы
- Итераторы и асинхронные итераторы из старой лекции
- Итераторы
- Асинхронные итераторы
Абстракции портированные из параллельного программирования в асинхронное
- Семафоры и мьютексы в JavaScript и Node.js
- Асинхронные абстракции: Semaphore, Mutex
- Блокировки WebLocks API
- MDN блокировки — WebLocks API
- Блокировки Lock, Spin Lock
Абстракции параллельного программирования
- Многопоточность в Node.js
- Web Locks API in Node.js and browser
- Потоки и процессы в JavaScript, асинхронное и параллельное программирование на Node.js и в браузере
- Потоки та процеси українською для Web та Node.js, Atomics/CAS, шарена пам’ять, блокування
- Межпроцессовое взаимодействие в Node.js
- Межпроцессовое и межпотоковое взаимодействие, MessageChannel, BroadcastChannel
- Корутины coroutines
Асинхронная композиция compose callbacks & async compose
- Асинхронная композиция: compose, pipe — функциональное программирование
- Асинхронная композиция функций
- Примеры кода
Асинхронность на потоках событий RxJS
- Асинхронность на RxJS из старой лекции
- Примеры кода
Модель акторов actor model
- Модель акторов українською
- Примеры кода
Библиотека do
Функциональное асинхронное программирование, контракт Future
- Асинхронность на фьючерах без состояния
- Примеры кода
Асинхронность на синхронных генераторах function*/yield
Мидлвары middleware как антипаттерн
- Node.js Middleware – никогда больше!
- Примеры кода
Контракты семейства Deferred
- Deferred: Асинхронность на диферах с состоянием
- Примеры кода
Async.js
- Легаси код на библиотеке Async.js
- Примеры кода
Коллекция асинхронных абстракций Metasync
- Архивная лекция
Трекинг асинхронных контекстов
- AsyncLocalStorage, AsyncResource
- Примеры использования AsyncLocalStorage и AsyncResource
Принципы и паттерны с адаптацией для JavaScript, TypeScript, Node.js и асинхронного программирования
- Принципы SOLID
- Паттерны GRASP
- Контрактное программирование
- Задания по паттерну Adapter









