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

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

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

Программа

Модуль 1

Теория

ЛЕКЦИЯ 1 Модели конкурентности Валентин Удальцов
Это вводная теоретическая лекция, на которой мы с помощью понятных схем разберёмся, что такое параллельность, конкурентность, многозадачность, асинхронность. Поймём, как утилизируется процессорное время и чем потоки отличаются от процессов. Сравнив PHP-FPM, Roadrunner и нативные неблокирующие HTTP-сервера, получим ответ на вопрос: какие преимущества даёт асинхронная программа и какой ценой.
  • Конкурентность
  • Параллельность
  • Асинхронность
  • Процессы
  • Потоки
  • Многопоточность
  • Корутины
  • Кооперативная многозадачность
  • Вытесняющая многозадачность
  • Модель выполнения классического PHP-приложения
  • PHP-FPM
  • RoadRunner
  • Долгоживущие PHP-приложения
  • Amp HTTP Server
Модуль 2

Эволюция

ЛЕКЦИЯ 1 HTTP-сервер на коллбэках Валентин Удальцов
Приступаем к практике. Вместе пишем максимально упрощённую версию неблокирующего HTTP-сервера без всяких генераторов и файберов.
  • Блокирующий и неблокирующий ввод-вывод
  • функции stream_* в PHP
  • Callback hell
  • Promises
ЛЕКЦИЯ 2 HTTP-сервер на генераторах Валентин Удальцов
Разбираем генераторы в Python и PHP как механизм приостановки выполнения, обсуждаем статью Никиты Попова, строим корутины поверх yield — и переносим HTTP-сервер на AMPHP v2.
  • Генераторы
  • yield
  • yield from
  • send
  • AMPHP v2
ЛЕКЦИЯ 3 Файберы и Event Loop Валентин Удальцов
Знакомимся с файберами как способом приостанавливать и возобновлять выполнение без генераторов, пишем свой простейший Event Loop и переходим на Revolt.
  • Fiber
  • Green Threads
  • Stackful Coroutines
  • Event Loop
  • Reactor
  • Scheduler
  • Revolt
ЛЕКЦИЯ 4 HTTP-сервер на файберах Валентин Удальцов
Переписываем HTTP-сервер на файберах поверх современной модели AMPHP — и смотрим, что на самом деле происходит под капотом, пока код выглядит почти синхронным.
  • Amp HTTP Server
  • Middleware
  • Radix Router
ЛЕКЦИЯ 5 История и будущее True Async Дмитрий Dantes
Смотрим на проект PHP True Async — какие ограничения текущей модели он снимает и куда это может привести язык дальше.
  • True Async
  • Перспективы асинхронного PHP
Модуль 3

Методы и приёмы

ЛЕКЦИЯ 1 Инструменты управления конкурентностью Валентин Удальцов
Собираем инструментарий для работы с конкурентными операциями: async/await и комбинаторы, отмену и таймауты, мьютексы для синхронизации и graceful shutdown.
  • Future
  • async
  • await
  • awaitAll
  • awaitAny
  • Cancellation
  • Mutex
  • Pipeline
  • Backpressure
  • Graceful shutdown
ЛЕКЦИЯ 2 Работа с базой данных Валентин Удальцов
Разбираемся, почему обращение к БД — это I/O-bound задача, как устроен пул соединений в долгоживущем приложении и как с этим работает AMPHP Postgres.
  • Connection Pool
  • Transaction
  • PgBouncer
  • AMPHP Postgres
ЛЕКЦИЯ 3 Состояние и зависимости Валентин Удальцов
Смотрим, почему в долгоживущем приложении синглтон-сервисов недостаточно. Решаем задачу с помощью scoped сервисов на примере Thesis DIC.
  • DIC
  • Object Lifetime
  • Scope
  • Singleton
  • Thesis DIC
ЛЕКЦИЯ 4 Blocking и CPU-bound задачи Валентин Удальцов
Разбираемся, что блокирует Event Loop, и как это исправлять.
  • Filesystem
  • CPU-bound
  • Process pools
Модуль 4

Практика

ЛЕКЦИЯ 1 Пишем простое асинхронное веб-приложение Валентин Удальцов
На примере небольшого сайта наподобие лендинга Пыхника собираем настоящее долгоживущее PHP-приложение с базой данных, внешними API-вызовами и фоновыми задачами.
  • HTTP Server
  • Routing
  • PostgreSQL
  • Queues
  • Native Cron
Модуль 5

Другие языки

ЛЕКЦИЯ 1 Go, Java, Erlang и Pony: четыре модели конкурентности Дмитрий Dantes
Универсальный швейцарский нож Go — одно решение для множества задач. Новые идеи в Java: проект Loom. Actor Model: изоляция вместо синхронизации. Pony как Rust в мире асинхронности.
  • Go
  • Java
  • Project Loom
  • Actor
  • Pony
  • Virtual Threads
  • Erlang
  • Goroutines
  • Channels

Расписание

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

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