Хардкорный курс асинхронного PHP

Пять модулей — от модели выполнения до готового приложения

Асинхронный слон PHP
МОДУЛЕЙ 5
ЛЕКЦИЙ 12
ДЛИТЕЛЬНОСТЬ ~6 недель
ПРЕПОДАВАТЕЛИ
Валентин Удальцов Дмитрий Dantes

Программа

Модуль 1

Теория асинхронности

ЛЕКЦИЯ 1 Модели конкурентности Валентин Удальцов

Разбираемся, чем конкурентность отличается от параллельности и где среди процессов, потоков и корутин место асинхронности — и почему классическая модель PHP-FPM для этого не подходит.

  • Конкурентность
  • Параллельность
  • Асинхронность
  • Процессы
  • Потоки
  • Многопоточность
  • Корутины
  • Модель выполнения классического PHP-приложения
  • PHP-FPM
  • RoadRunner
  • Долгоживущие PHP-приложения
  • Amp HTTP Server
Модуль 2

Эволюция асинхронности

ЛЕКЦИЯ 1 Неблокирующий HTTP-сервер на коллбэках и промисах Валентин Удальцов

Пишем неблокирующий HTTP-сервер на голых stream_*-функциях, попадаем в callback hell и учимся упаковывать его в promises на примере ReactPHP HTTP Server.

  • Блокирующий и неблокирующий ввод-вывод
  • stream_* в PHP
  • Пишем простейший неблокирующий HTTP-сервер
  • Callback-based API
  • Callback hell
  • Promises
  • Упаковываем callback-based код в promises
  • ReactPHP HTTP Server
ЛЕКЦИЯ 2 Корутины на генераторах: HTTP-сервер на AMPHP v2 Валентин Удальцов

Разбираем генераторы в Python и PHP как механизм приостановки выполнения, строим корутины поверх yield — и переносим HTTP-сервер на AMPHP v2.

  • Генераторы в Python
  • Генераторы в PHP
  • yield как механизм приостановки выполнения
  • Cooperative multitasking
  • Корутины поверх генераторов
  • Как работал async/await до Fibers
  • Сервер на AMPHP v2
ЛЕКЦИЯ 3 Файберы и Event Loop Валентин Удальцов

Знакомимся с файберами как способом приостанавливать и возобновлять выполнение без генераторов, пишем свой простейший Event Loop и переходим на Revolt.

  • Fibers в PHP
  • Приостановка и возобновление выполнения
  • Зачем нужен Event Loop
  • Пишем простейший Event Loop
  • Очередь задач и I/O readiness
  • Revolt Event Loop
ЛЕКЦИЯ 4 HTTP-сервер на файберах: современный async в PHP Валентин Удальцов

Переписываем HTTP-сервер на файберах поверх современной модели AMPHP — и смотрим, что на самом деле происходит под капотом, пока код выглядит почти синхронным.

  • Неблокирующий код поверх Fibers
  • Современная модель AMPHP
  • Amp HTTP Server
  • Почему async-код теперь выглядит почти как синхронный
  • Что на самом деле происходит во время ожидания I/O
ЛЕКЦИЯ 5 История и будущее True Async Дмитрий Dantes

Смотрим на историю асинхронного PHP и на проект True Async — какие ограничения текущей модели он снимает и куда это может привести язык дальше.

  • История развития асинхронного PHP
  • True Async
  • Ограничения текущей модели PHP
  • Возможные изменения языка и runtime
  • Перспективы асинхронного PHP
Модуль 3

Применение асинхронного программирования

ЛЕКЦИЯ 1 Инструменты управления конкурентностью Валентин Удальцов

Собираем инструментарий для работы с конкурентными операциями: async/await и комбинаторы, отмену и таймауты, мьютексы для синхронизации и graceful shutdown.

  • Futures
  • async
  • await
  • Комбинаторы
  • Параллельное выполнение операций
  • Cancellation
  • Timeouts
  • Mutex
  • Синхронизация конкурентных операций
  • Async iterators
  • Graceful shutdown
ЛЕКЦИЯ 2 Работа с базой данных Валентин Удальцов

Разбираемся, почему обращение к БД — это I/O-bound задача, как устроен пул соединений в долгоживущем приложении и как с этим работает AMPHP Postgres.

  • Почему работа с БД — I/O-bound задача
  • Соединения с базой данных в классическом PHP
  • Connection pooling
  • PgBouncer
  • Пулы соединений внутри долгоживущего приложения
  • AMPHP Postgres
  • Транзакции в асинхронном приложении
  • Ограничение конкурентности запросов
ЛЕКЦИЯ 3 Состояние и Dependency Injection в асинхронном приложении Валентин Удальцов

Смотрим, почему в долгоживущем приложении singleton — уже не совсем singleton, и как с этим справляются request-scoped сервисы и DI на примере Thesis DIC.

  • Чем долгоживущее приложение отличается от PHP-FPM
  • Почему singleton больше не всегда singleton
  • Request-scoped состояние
  • Scoped services
  • Контекст выполнения
  • Dependency Injection в async-приложении
  • Реализация scoped-сервисов на примере Thesis DIC
ЛЕКЦИЯ 4 Blocking и CPU-bound задачи Валентин Удальцов

Разбираемся, что Event Loop не может сделать асинхронным — блокирующие вызовы и CPU-bound задачи — и как выносить такую работу в отдельные процессы.

  • Что нельзя сделать асинхронным с помощью Event Loop
  • Blocking API
  • Файловая система
  • CPU-bound задачи
  • Как blocking-код останавливает Event Loop
  • Вынос работы в отдельные процессы
  • Process pools
  • Коммуникация между процессами
Модуль 4

Собираем простейшее приложение

ЛЕКЦИЯ 1 Собираем веб-приложение с нуля: сайт a la Пыхник Валентин Удальцов

На примере небольшого сайта наподобие лендинга Пыхника собираем настоящее долгоживущее PHP-приложение.

  • HTTP-сервер
  • Routing
  • Статические файлы
  • Dependency Injection
  • Работа с PostgreSQL
  • Connection pool
  • Формы
  • Валидация
  • Работа с внешними API
  • Оплата
  • Отправка писем
  • Очередь фоновых задач
  • Graceful shutdown
  • Собираем всё в одно приложение
Модуль 5

Асинхронность в других языках

ЛЕКЦИЯ 1 Go, Java, Erlang и Pony: четыре модели конкурентности Дмитрий Dantes

Сравниваем, как с конкурентностью справляются другие языки и платформы — горутины и каналы в Go, Project Loom в Java, модель акторов в Erlang и систему типов Pony.

  • Goroutines и channels
  • Runtime Go: одна модель для I/O и вычислений
  • Project Loom
  • Virtual Threads
  • Асинхронность, спрятанная внутри JVM
  • Actor Model
  • Erlang: процессы и сообщения вместо общей памяти
  • Изоляция вместо синхронизации
  • Pony и reference capabilities
  • Data races как свойство системы типов
  • Сравнение моделей конкурентности

Расписание

По понедельникам и четвергам, 12 лекций — 6 недель, с 17 сентября по 26 октября.

Сентябрь
Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Октябрь
Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Расписание предварительное и может измениться. Переносы будем согласовывать не менее чем за сутки до занятия.

Преподаватели

Валентин Удальцов
Валентин Удальцов
Автор Пыха и Thesis

Евангелист PHP. Автор канала Пых. Освободитель new от скобок в PHP 8.4. Занимается open source разработкой под PHP в проектах Thesis и Typhoon.

Дмитрий Dantes
Дмитрий Dantes
Архитектор ПО

Архитектор программного обеспечения и автор проекта PHP True Async. Уже несколько лет исследует альтернативные подходы к развитию PHP и экспериментирует с его возможностями за пределами привычного рантайма. Ведёт блог в Telegram.

Стоимость и запись

Набираем 30 студентов на первый поток. Свяжемся в течение 3 дней после заявки.

Оставить заявку