Принц
Администратор
- Регистрация
- 16 Дек 2016
- Сообщения
- 164.154
- Реакции
- 465.818
Складчина: Асинхронное программирование [Тимур Шемсединов]
Для JavaScrip и TypeScript. 9 часов основного материала и более 45 часов дополнительного.
Лекции на двух языках: русском и украинском.
Этому курсу уже 15 лет, я обновляю его каждый год, и за это время он стал самым крупным и полным сборником знаний об асинхронном программировании. В интернете полно устаревших материалов по JavaScript, и даже то, как люди писали асинхронный код 5–7 лет назад, уже мало похоже на современные практики. В открытом доступе есть все материалы, записанные до 2020 года: открытый курс сообщества Metarhia по асинхронному программированию. Старый курс стал слишком громоздким, но его материалы также включены в этот курс как дополнительные и исторические, поскольку поддержку легаси никто не отменял.
Обзор контрактов и абстракций
Обзор асинхронного программирования на украинском языке
Обзор параллельного программирования
Следует также отметить, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код на системном уровне. Что касается системного уровня, то здесь необходимо использовать теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции).
Краткое содержание
Для написания прикладного кода достаточно знаний из первого столбца таблицы. Второй столбец полезен в качестве дополнительных знаний. Для бэкенда на Node нужно освоить два первых столбца. Третий столбец содержит системные сведения, которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбец — это дополнительные абстракции, которые можно изучать выборочно. Они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования, пятый столбец — это вещи, которые морально устарели и могут рассматриваться как интересный антиквариат.
Акцент на практическом применении (примеры кода из реальных проектов)
Актуальность и соответствие стандартам по состоянию на 2023–2025 годы
Задачи и разбор их решений, семинары, ревью кода (курс — это не только видео)
Рекомендации по выбору стиля и абстракций асинхронности в зависимости от задачи
Внимание к корректной обработке ошибок во всех стилях асинхронности
Акцент на надёжность, поддерживаемость, тестируемость, снижение зацепления
Примеры и задачи по исправлению скрытых проблемных состояний и гонок данных
Содержание
1. Асинхронные контракты на основе обратного вызова
1. Минимально необходимое понимание рантайма: цикл обработки событий, ввод-вывод, таймеры
2. Паттерны: актёр, реактор, проактор
1. Контракты на основе событий
1. Абстракция потоков Stream
3. Контракт Thenable
1. Контракт Promise
1. Контракт асинхронных функций async/await
1. Контракт сигналов Signals
1. Обработка ошибок из старой лекции
2. Асинхронная очередь AsyncQueue
2. Асинхронный пул AsyncPool
2. Асинхронная коллекция Collector
2. Схема «цепочка ответственности»
2. Конвертеры контрактов asyncify, callbackify, стыковка кода в разных стилях
2. Предотвращение состояния гонки при работе с данными и управлении в асинхронном коде
2. Отмена асинхронных операций
2. Async Generator и Async Iterator
3. Абстракции, перенесённые из параллельного программирования в асинхронное
3. Абстракции параллельного программирования: процессы и потоки
4. Асинхронная композиция compose callbacks & async compose
4. Асинхронность на основе потоков событий RxJS
4. Модель акторов actor model
4. Функциональное асинхронное программирование, контракт Future
5. Асинхронность на синхронных генераторах function*/yield
5. Мидлвары middleware как антипаттерн
5. Семейство контрактов Deferred
5. Async.js
5. Коллекция асинхронных абстракций Metasync
3. Отслеживание асинхронных контекстов
Принципы и шаблоны с адаптацией для JavaScript, TypeScript, Node. js и асинхронного программирования
Спойлер: Подробно:
1. Асинхронные контракты на основе обратного вызова
Контракты Callback и Callback-last-error-first
Примеры кода
Задания по колбекам и созвоны с разбором заданий
Функции высшего порядка, колбеки, события в JavaScript
Асинхронное программирование на основе callback`ов в JavaScript
V8: оптимизация возврата из функции в JavaScript с помощью return, resolve, callback — Деми Мурыч
1. Минимально необходимое понимание рантайма: цикл обработки событий, ввод-вывод, таймеры
Фазы цикла обработки событий в V8 и Node.js
Стрим с разбором цикла событий и асинхронности
Примеры кода
Задания по таймерам
Цикл событий, асинхронность, таймеры, колбеки, промисы, async/await
Асинхронное программирование на JavaScript и Node.js: обратный вызов, промис, thenable, async/await
2. Паттерны: актёр, реактор, проактор
Композиция актора и состояния (композиция актора и состояния)
Паттерн Reactor (реактор): как устроен цикл обработки событий в Node.js
Паттерн Proactor
Семинар «Шаблоны проектирования: актор, реактор, проактор для JavaScript и TypeScript»
1. Контракты на основе событий
События: EventTarget, EventEmitter
Наблюдатель паттерна GoF
Примеры кода для событий
Задания по событиям
EventEmitter из старой лекции
Примеры кода из старой лекции по EventEmitter
Проверка кода: Observable, EventEmitter, EventTarget
1. Абстракция потоков Stream
Потоки Readable, Writable, Transform, открытый конструктор, буферизация, противодавление
Web Streams — браузерное API для потоков событий
Примеры кода
Паттерн открытый конструктор (Revealing Constructor
Примеры кода
Потоки (Streams) в Node.js
HTTP-сервер на Node.js, req, res, сокеты и потоки (streams)
3. Контракт Thenable
Контракт Thenabe
Тогдабл из старой лекции
Удобный и лёгкий в использовании await
Примеры кода
Задания по Thenabe и созвон с разбором заданий
1. Контракт Promise
Обещание: then/catch/finally и методы класса all, allSettled, race, any
Асинхронность на промисах из старой лекции
Примеры кода
Задания по Promise и созвон с разбором заданий
1. Контракт асинхронных функций async/await
Асинхронные функции
Асинхронные функции из старой лекции
Примеры кода
Задания по async/await
1. Контракт сигналов Signals
Сигналы: сигнал, вычисление, эффект
Примеры кода
Задания по сигналам
Обработка ошибок, их выявление и решение проблем с помощью стектрейса
Обработка ошибок, логирование и агрегирование
Семинар: ошибки, исключения, операционные, программные, аппаратные, восстановление, логирование
Реализация Graceful shutdown в Node.js, unhandled exceptions async stack trace
1. Обработка ошибок из старой лекции
Примеры кода
Задания по обработке ошибок
2. Асинхронная очередь AsyncQueue
Семинар: асинхронная очередь — AsyncQueue, ConcurrentQueue
Очередь Node. js, оптимизированная для JavaScript V8: кольцевой буфер, развёрнутый список, развёрнутая очередь
Конкурентная асинхронная очередь из старой лекции
Примеры кода
2. Асинхронный пул AsyncPool
Паттерн Factory Method
Паттерны: пул объектов, фабрика
Асинхронный Pool
Семинар: конструктор, фабрика, фабричный метод, пул объектов
Асинхронный пул для рабочих потоков в Node.js
Фабрики и пулы объектов в JavaScript, factorify, poolify
Примеры кода
2. Асинхронная коллекция Collector
Асинхронные коллекции (собираем значения по мере готовности)
Асинхронные сборщики данных
Примеры кода
2. Схема «цепочка ответственности»
Схема: цепочка ответственности
Примеры кода
2. Конвертеры контрактов asyncify, callbackify, стыковка кода в разных стилях
Шаблоны GoF: адаптер
Асинхронные адаптеры
Семинар по адаптерам для Node. js и асинхронному программированию
Ревью кода Node. js promisify — Тимур Шемсединов и Деми Мурч
Асинхронные адаптеры из старой лекции
Примеры кода
2. Предотвращение состояния гонки при работе с данными и управлении в асинхронном коде
2. Отмена асинхронных операций
AbortController, AbortSignal
Примеры кода
2. Async Generator и Async Iterator
Генератор, итератор, итерируемый объект
Асинхронный генератор, асинхронный итератор, асинхронная итерируемость
Генераторы и асинхронные генераторы из старой лекции
Итераторы и асинхронные итераторы из старой лекции
Примеры кода
3. Абстракции, перенесённые из параллельного программирования в асинхронное
Семафоры и мьютексы в JavaScript и Node.js
Асинхронные абстракции: Semaphore, Mutex
Блокировка API WebLocks
Блокировки Lock, Spin Lock
3. Абстракции параллельного программирования: процессы и потоки
Многопоточность в Node.js
API веб-замков в Node. js и браузере
Потоки и процессы в JavaScript, асинхронное и параллельное программирование на Node. js и в браузере
Потоки и процессы на украинском языке для Web и Node.js, атомарные операции/CAS, разделяемая память, блокировка
Межпроцессное взаимодействие в Node.js
Межпроцессное и межпотоковое взаимодействие, MessageChannel BroadcastChannel
Корутины coroutines
4. Асинхронная композиция compose callbacks & async compose
Асинхронная композиция: compose, pipe — функциональное программирование
Асинхронная композиция функций
Примеры кода
4. Асинхронность на основе потоков событий RxJS
Асинхронность на RxJS из старой лекции
Примеры кода
4. Модель акторов actor model
Модель акторов
Примеры кода
4. Функциональное асинхронное программирование, контракт Future
Асинхронный шаблон FP — будущее
Асинхронность на фьючерсах без сохранения состояния
Примеры кода
5. Асинхронность на синхронных генераторах function*/yield
5. Мидлвары middleware как антипаттерн
Промежуточное ПО Node. js — больше никогда!
Примеры кода
5. Семейство контрактов Deferred
Отложенный: асинхронность на отложенных объектах с состоянием
Примеры кода
5. Async.js
Код Легаси в библиотеке Async.js
Примеры кода
5. Коллекция асинхронных абстракций Metasync
3. Отслеживание асинхронных контекстов
AsyncLocalStorage, AsyncResource
Примеры использования AsyncLocalStorage и AsyncResource
Принципы и шаблоны с адаптацией для JavaScript, TypeScript, Node. js и асинхронного программирования
Принципы SOLID
Паттерны GRASP
Контрактное программирование
Что нужно знать и уметь на входе:
Синтаксис JavaScript без всяких хитростей
Уверенно владейте git, у вас должен быть аккаунт на github
Любая среда разработки, IDE или редактор
Чем этот курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастер-класс, не стрим. Новый курс — это максимально концентрированная информация и практические задания как для прикладного, так и для системного программирования со сравнением этих подходов.
СКАЧАТЬ
Для JavaScrip и TypeScript. 9 часов основного материала и более 45 часов дополнительного.
Лекции на двух языках: русском и украинском.
Этому курсу уже 15 лет, я обновляю его каждый год, и за это время он стал самым крупным и полным сборником знаний об асинхронном программировании. В интернете полно устаревших материалов по JavaScript, и даже то, как люди писали асинхронный код 5–7 лет назад, уже мало похоже на современные практики. В открытом доступе есть все материалы, записанные до 2020 года: открытый курс сообщества Metarhia по асинхронному программированию. Старый курс стал слишком громоздким, но его материалы также включены в этот курс как дополнительные и исторические, поскольку поддержку легаси никто не отменял.
Обзор контрактов и абстракций
Обзор асинхронного программирования на украинском языке
Обзор параллельного программирования
Следует также отметить, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код на системном уровне. Что касается системного уровня, то здесь необходимо использовать теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции).
Краткое содержание
Для написания прикладного кода достаточно знаний из первого столбца таблицы. Второй столбец полезен в качестве дополнительных знаний. Для бэкенда на Node нужно освоить два первых столбца. Третий столбец содержит системные сведения, которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбец — это дополнительные абстракции, которые можно изучать выборочно. Они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования, пятый столбец — это вещи, которые морально устарели и могут рассматриваться как интересный антиквариат.
Акцент на практическом применении (примеры кода из реальных проектов)
Актуальность и соответствие стандартам по состоянию на 2023–2025 годы
Задачи и разбор их решений, семинары, ревью кода (курс — это не только видео)
Рекомендации по выбору стиля и абстракций асинхронности в зависимости от задачи
Внимание к корректной обработке ошибок во всех стилях асинхронности
Акцент на надёжность, поддерживаемость, тестируемость, снижение зацепления
Примеры и задачи по исправлению скрытых проблемных состояний и гонок данных
Содержание
1. Асинхронные контракты на основе обратного вызова
1. Минимально необходимое понимание рантайма: цикл обработки событий, ввод-вывод, таймеры
2. Паттерны: актёр, реактор, проактор
1. Контракты на основе событий
1. Абстракция потоков Stream
3. Контракт Thenable
1. Контракт Promise
1. Контракт асинхронных функций async/await
1. Контракт сигналов Signals
1. Обработка ошибок из старой лекции
2. Асинхронная очередь AsyncQueue
2. Асинхронный пул AsyncPool
2. Асинхронная коллекция Collector
2. Схема «цепочка ответственности»
2. Конвертеры контрактов asyncify, callbackify, стыковка кода в разных стилях
2. Предотвращение состояния гонки при работе с данными и управлении в асинхронном коде
2. Отмена асинхронных операций
2. Async Generator и Async Iterator
3. Абстракции, перенесённые из параллельного программирования в асинхронное
3. Абстракции параллельного программирования: процессы и потоки
4. Асинхронная композиция compose callbacks & async compose
4. Асинхронность на основе потоков событий RxJS
4. Модель акторов actor model
4. Функциональное асинхронное программирование, контракт Future
5. Асинхронность на синхронных генераторах function*/yield
5. Мидлвары middleware как антипаттерн
5. Семейство контрактов Deferred
5. Async.js
5. Коллекция асинхронных абстракций Metasync
3. Отслеживание асинхронных контекстов
Принципы и шаблоны с адаптацией для JavaScript, TypeScript, Node. js и асинхронного программирования
Спойлер: Подробно:
1. Асинхронные контракты на основе обратного вызова
Контракты Callback и Callback-last-error-first
Примеры кода
Задания по колбекам и созвоны с разбором заданий
Функции высшего порядка, колбеки, события в JavaScript
Асинхронное программирование на основе callback`ов в JavaScript
V8: оптимизация возврата из функции в JavaScript с помощью return, resolve, callback — Деми Мурыч
1. Минимально необходимое понимание рантайма: цикл обработки событий, ввод-вывод, таймеры
Фазы цикла обработки событий в V8 и Node.js
Стрим с разбором цикла событий и асинхронности
Примеры кода
Задания по таймерам
Цикл событий, асинхронность, таймеры, колбеки, промисы, async/await
Асинхронное программирование на JavaScript и Node.js: обратный вызов, промис, thenable, async/await
2. Паттерны: актёр, реактор, проактор
Композиция актора и состояния (композиция актора и состояния)
Паттерн Reactor (реактор): как устроен цикл обработки событий в Node.js
Паттерн Proactor
Семинар «Шаблоны проектирования: актор, реактор, проактор для JavaScript и TypeScript»
1. Контракты на основе событий
События: EventTarget, EventEmitter
Наблюдатель паттерна GoF
Примеры кода для событий
Задания по событиям
EventEmitter из старой лекции
Примеры кода из старой лекции по EventEmitter
Проверка кода: Observable, EventEmitter, EventTarget
1. Абстракция потоков Stream
Потоки Readable, Writable, Transform, открытый конструктор, буферизация, противодавление
Web Streams — браузерное API для потоков событий
Примеры кода
Паттерн открытый конструктор (Revealing Constructor
Примеры кода
Потоки (Streams) в Node.js
HTTP-сервер на Node.js, req, res, сокеты и потоки (streams)
3. Контракт Thenable
Контракт Thenabe
Тогдабл из старой лекции
Удобный и лёгкий в использовании await
Примеры кода
Задания по Thenabe и созвон с разбором заданий
1. Контракт Promise
Обещание: then/catch/finally и методы класса all, allSettled, race, any
Асинхронность на промисах из старой лекции
Примеры кода
Задания по Promise и созвон с разбором заданий
1. Контракт асинхронных функций async/await
Асинхронные функции
Асинхронные функции из старой лекции
Примеры кода
Задания по async/await
1. Контракт сигналов Signals
Сигналы: сигнал, вычисление, эффект
Примеры кода
Задания по сигналам
Обработка ошибок, их выявление и решение проблем с помощью стектрейса
Обработка ошибок, логирование и агрегирование
Семинар: ошибки, исключения, операционные, программные, аппаратные, восстановление, логирование
Реализация Graceful shutdown в Node.js, unhandled exceptions async stack trace
1. Обработка ошибок из старой лекции
Примеры кода
Задания по обработке ошибок
2. Асинхронная очередь AsyncQueue
Семинар: асинхронная очередь — AsyncQueue, ConcurrentQueue
Очередь Node. js, оптимизированная для JavaScript V8: кольцевой буфер, развёрнутый список, развёрнутая очередь
Конкурентная асинхронная очередь из старой лекции
Примеры кода
2. Асинхронный пул AsyncPool
Паттерн Factory Method
Паттерны: пул объектов, фабрика
Асинхронный Pool
Семинар: конструктор, фабрика, фабричный метод, пул объектов
Асинхронный пул для рабочих потоков в Node.js
Фабрики и пулы объектов в JavaScript, factorify, poolify
Примеры кода
2. Асинхронная коллекция Collector
Асинхронные коллекции (собираем значения по мере готовности)
Асинхронные сборщики данных
Примеры кода
2. Схема «цепочка ответственности»
Схема: цепочка ответственности
Примеры кода
2. Конвертеры контрактов asyncify, callbackify, стыковка кода в разных стилях
Шаблоны GoF: адаптер
Асинхронные адаптеры
Семинар по адаптерам для Node. js и асинхронному программированию
Ревью кода Node. js promisify — Тимур Шемсединов и Деми Мурч
Асинхронные адаптеры из старой лекции
Примеры кода
2. Предотвращение состояния гонки при работе с данными и управлении в асинхронном коде
2. Отмена асинхронных операций
AbortController, AbortSignal
Примеры кода
2. Async Generator и Async Iterator
Генератор, итератор, итерируемый объект
Асинхронный генератор, асинхронный итератор, асинхронная итерируемость
Генераторы и асинхронные генераторы из старой лекции
Итераторы и асинхронные итераторы из старой лекции
Примеры кода
3. Абстракции, перенесённые из параллельного программирования в асинхронное
Семафоры и мьютексы в JavaScript и Node.js
Асинхронные абстракции: Semaphore, Mutex
Блокировка API WebLocks
Блокировки Lock, Spin Lock
3. Абстракции параллельного программирования: процессы и потоки
Многопоточность в Node.js
API веб-замков в Node. js и браузере
Потоки и процессы в JavaScript, асинхронное и параллельное программирование на Node. js и в браузере
Потоки и процессы на украинском языке для Web и Node.js, атомарные операции/CAS, разделяемая память, блокировка
Межпроцессное взаимодействие в Node.js
Межпроцессное и межпотоковое взаимодействие, MessageChannel BroadcastChannel
Корутины coroutines
4. Асинхронная композиция compose callbacks & async compose
Асинхронная композиция: compose, pipe — функциональное программирование
Асинхронная композиция функций
Примеры кода
4. Асинхронность на основе потоков событий RxJS
Асинхронность на RxJS из старой лекции
Примеры кода
4. Модель акторов actor model
Модель акторов
Примеры кода
4. Функциональное асинхронное программирование, контракт Future
Асинхронный шаблон FP — будущее
Асинхронность на фьючерсах без сохранения состояния
Примеры кода
5. Асинхронность на синхронных генераторах function*/yield
5. Мидлвары middleware как антипаттерн
Промежуточное ПО Node. js — больше никогда!
Примеры кода
5. Семейство контрактов Deferred
Отложенный: асинхронность на отложенных объектах с состоянием
Примеры кода
5. Async.js
Код Легаси в библиотеке Async.js
Примеры кода
5. Коллекция асинхронных абстракций Metasync
3. Отслеживание асинхронных контекстов
AsyncLocalStorage, AsyncResource
Примеры использования AsyncLocalStorage и AsyncResource
Принципы и шаблоны с адаптацией для JavaScript, TypeScript, Node. js и асинхронного программирования
Принципы SOLID
Паттерны GRASP
Контрактное программирование
Что нужно знать и уметь на входе:
Синтаксис JavaScript без всяких хитростей
Уверенно владейте git, у вас должен быть аккаунт на github
Любая среда разработки, IDE или редактор
Чем этот курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастер-класс, не стрим. Новый курс — это максимально концентрированная информация и практические задания как для прикладного, так и для системного программирования со сравнением этих подходов.
СКАЧАТЬ
Для просмотра скрытого содержимого вы должны зарегистрироваться
Возможно, Вас ещё заинтересует:
- Управленец (12-й месяц 2025) [Виктория Шухат]
- Курс по математике. Продвинутый уровень 6 класс [Екатерина Щербакова]
- Система глубокого сна. 5 ключей от бессонницы и утренней усталости [Владимир Осипов]
- Как придумать свой метод решения любой задачи [Александр Логвинов] + Высвободи Потенциал Потока: Цикл Динамики Энергии [Максим Катаев]
- Нейропсихология [ИПНиН] [Мария Каменецкая]
- EMDR и телесные практики [Институт EMDR и FLASH] [Надежда Десятник]