Методы асинхронного программирования


Асинхронное программирование за последнее время стало не менее развитым направлением, чем классическое параллельное программирование, а в мире 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)


  1. UGO
    22.05.2019 21:47
    +1

    Спасибо за труд!


  1. Alfinity
    22.05.2019 21:47
    +1

    У Вас великолепные курсы! Спасибо!


  1. MaM
    22.05.2019 22:52
    +1

    О мой бог. Редко такое говорю потому, что я очень требовательный к контенту. Но это отличнейший курс, оно еще и бесплатно.


    1. MarcusAurelius Автор
      22.05.2019 23:00

      Киевский политехнический институт, Факультет информатики и вычислительной техники. Каждый год более 1000 студентов проходят этот курс.


  1. Jahak
    23.05.2019 09:35
    +1

    Спасибо большое.


  1. imouseR
    23.05.2019 10:44
    +1

    Огромнейшее спасибо!


  1. a-tk
    23.05.2019 10:51
    +1

    Ещё не смотрел и не осуждаю, но надеюсь, что оно будет полезно не только в контексте JS.


  1. OneType
    23.05.2019 11:59
    +1

    А есть в литературном виде? А то не люблю когда лекторы размазывают по времени свою болтовню.


    1. MarcusAurelius Автор
      23.05.2019 12:16

      Есть примеры кода в гитхабе, код иллюстрирует идеи лучше, чем видео и статьи. Я всегда предпочитаю сразу находить и смотреть код, когда читаю статью. Но в виде книги тоже собираюсь сделать в 2020 году весь курс из 100 лекций, который уже точно в 100 не уложится. habr.com/ru/post/434686


    1. a-tk
      23.05.2019 15:40

      Есть на ютубе замечательная вещь — ускорение видео


  1. rfq
    23.05.2019 20:24

    Поделюсь полученным мною экспериментальным результатом: актор — это переиспользуемый асинхронный вызов процедуры. Поэтому акторы — подвид асинхронного программирования. А корутины — способ реализации акторов.


  1. voidshah
    24.05.2019 16:23
    +1

    Огромная благодарность за курс, Тимур! И не только за этот! Сказать, что я в восторге от таких лекций и курсов — ничего не сказать!)