Огляд
Розділ архітектури описує внутрішню будову ключових компонентів TrueAsync на рівні C-коду: структури даних, алгоритми, інтеграцію з Zend Engine та взаємодію між ядром PHP і асинхронним розширенням.
Ці матеріали призначені для розробників, які хочуть зрозуміти, як TrueAsync працює «під капотом», або планують створювати власні розширення.
TrueAsync ABI
Серце асинхронного ABI: вказівники на функції, система реєстрації розширень, глобальний стан (zend_async_globals_t), макроси ZEND_ASYNC_* та версіонування API.
Корутини, Планувальник та Реактор
Внутрішня будова планувальника корутин та реактора подій: черги (кільцеві буфери), перемикання контексту через fiber, мікрозадачі, цикл подій libuv, пул контекстів fiber та коректне завершення.
Події та модель подій
zend_async_event_t — базова структура даних, від якої успадковуються всі асинхронні примітиви. Система зворотних викликів, підрахунок посилань, посилання на подію, прапорці, ієрархія типів подій.
Waker — механізм очікування та пробудження
Waker — це зв'язок між корутиною та подіями. Статуси, resume_when, зворотні виклики корутин, доставка помилок, структура zend_coroutine_t та обробники перемикання.
Збирання сміття в асинхронному контексті
Як PHP GC працює з корутинами, областями видимості та контекстами: обробники get_gc, обхід стеку fiber, зомбі-корутини, ієрархічний контекст та захист від циклічних посилань.
Компоненти
Async\Pool
Універсальний пул ресурсів. Розглянуті теми:
- Дворівнева структура даних (ABI в ядрі + внутрішня в розширенні)
- Алгоритми acquire/release з FIFO-чергою корутин, що очікують
- Перевірка стану через періодичний таймер
- Circuit Breaker з трьома станами
- C API для розширень (макроси
ZEND_ASYNC_POOL_*)
PDO Pool
PDO-специфічний рівень поверх Async\Pool. Розглянуті теми:
- Шаблонне з'єднання та відкладене створення реальних з'єднань
- Прив'язка з'єднань до корутин через HashTable
- Закріплення під час активних транзакцій та виразів
- Автоматичний відкат та очищення при завершенні корутини
- Управління обліковими даними у фабриці