Асинхронное программирование за последнее время стало не менее развитым направлением, чем классическое параллельное программирование, а в мире JavaSript, как в браузерах, так и в Node.js, понимание его приемов заняло одно из центральных мест в формировании мировоззрения разработчиков. Предлагаю вашему вниманию целостный и наиболее полный курс с объяснением всех широко распространенных методов асинхронного программирования, адаптеров между ними и вспомогательных проемов. Сейчас он состоит из 23 лекций, 3 докладов и 28 репозиториев с множеством примеров кода на github. Всего около 17 часов видео: ссылка на плейлист.
Пояснения к схеме
На схеме (выше) показаны связи между разными способами работы с асинхронностью. Цветные блоки относятся к асинхронному программированию, а ч/б показаны методы параллельного программирования (семафоры, мьютексы, барьеры и т.д.) и сети петри, которые, как и асинхронное программирование и модель акторов, являются разными подходами к реализации параллельных вычислений (они даны на схеме только чтоб точнее определить место асинхронного программирования). Модель акторов связана с асинхронным программированием потому, что реализация акторов без многопоточности тоже имеет право на существование и служит для структурирования асинхронного кода. Пунктирными линиями события и конкурентная очередь связаны с колбеками потому, что эти абстракции базируются на колбеках, но все же формируют качественно новые подходы.
Темы лекций
1. Асинхронное программирование (обзор)
2. Таймеры, таймауты и EventEmitter
3. Асинхронное программирование на callback`ах
4. Неблокирующее асинхронное итерирование
5. Асинхронность с библиотекой async.js
6. Асинхронность на промисах
7. Асинхронные функции и обработка ошибок
8. Асинхронные адаптеры: promisify, callbackify, asyncify
9. Асинхронные коллекторы данных
10. Необработанные ошибки в промисах
11. Проблема асинхронного стектрейса
12. Генераторы и асинхронные генераторы
13. Итераторы и асинхронные итераторы
14. Отмена асинхронных операций
15. Асинхронная композиция функций
16. Thenable и легковесный await
17. Конкурентная асинхронная очередь
18. Паттерн открытый конструктор (Revealing Constructor)
19. Future: Асинхронность на фьючерах без состояния
20. Deferred: Асинхронность на диферах с состоянием
21. Модель акторов (Actor Model)
22. Паттерн Наблюдатель (Observer + Observable)
23. Асинхронность на RxJS и потоки событий
Под каждым видео есть ссылки на репозитории с примерами кода, которые разбираются в видео. Я постарался показать, что не нужно сводить все к одной абстракции асинхронности. Универсального подхода к асинхронности не существует, а для каждого случая можно подобрать те методы, которые позволят писать код более естественно для этой конкретной задачи. Конечно же, этот курс будут дополняться и я прошу всех предлагать новые темы и контрибьютить в примеры кода. Основная задача курса — это показать как строить абстракции асинхронности изнутри, а не просто научить ими пользоваться. Практически все абстракции не берутся из библиотек, а даны в самой простой их реализации и пошагово разобрана их работа.
Комментарии (12)
MaM
22.05.2019 22:52+1О мой бог. Редко такое говорю потому, что я очень требовательный к контенту. Но это отличнейший курс, оно еще и бесплатно.
MarcusAurelius Автор
22.05.2019 23:00Киевский политехнический институт, Факультет информатики и вычислительной техники. Каждый год более 1000 студентов проходят этот курс.
a-tk
23.05.2019 10:51+1Ещё не смотрел и не осуждаю, но надеюсь, что оно будет полезно не только в контексте JS.
OneType
23.05.2019 11:59+1А есть в литературном виде? А то не люблю когда лекторы размазывают по времени свою болтовню.
MarcusAurelius Автор
23.05.2019 12:16Есть примеры кода в гитхабе, код иллюстрирует идеи лучше, чем видео и статьи. Я всегда предпочитаю сразу находить и смотреть код, когда читаю статью. Но в виде книги тоже собираюсь сделать в 2020 году весь курс из 100 лекций, который уже точно в 100 не уложится. habr.com/ru/post/434686
rfq
23.05.2019 20:24Поделюсь полученным мною экспериментальным результатом: актор — это переиспользуемый асинхронный вызов процедуры. Поэтому акторы — подвид асинхронного программирования. А корутины — способ реализации акторов.
voidshah
24.05.2019 16:23+1Огромная благодарность за курс, Тимур! И не только за этот! Сказать, что я в восторге от таких лекций и курсов — ничего не сказать!)
UGO
Спасибо за труд!