Скоро на All-DAR Асинхронное программирование [Тимур Шемсединов]

ALL DAR Bot

🛡 МОДЕРАТОР 🛡
Регистрация
26 Март 2018
Сообщения
85.559
Название: Асинхронное программирование [Тимур Шемсединов]

1ec89faddde902c437362907135ff672.png


Описание:
Для 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 или редактор
  • Чем этот курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастер-класс, не стрим. Новый курс — это максимально концентрированная информация и практические задания как для прикладного, так и для системного программирования со сравнением этих подходов.

◆ ЦЕНА МАТЕРИАЛА ◆
Цена: 16500 руб. (200$)

Материал «Асинхронное программирование [Тимур Шемсединов]», возможно, скоро появится на All-dar.

Пройдите регистрацию и оформите Premium подписку, чтобы первым получить доступ, и воспользуйтесь поиском — может быть, он уже опубликован.

Скрытый контент для пользователей All-dar.
 

Присоединяйтесь, чтобы открыть полный доступ

Комментарии и материалы этой темы доступны только зарегистрированным участникам

Новый участник?

Регистрация занимает меньше минуты

Уже с нами?

Войдите в свой аккаунт

Сверху