Огляд
Розділ архітектури описує внутрішню будову ключових компонентів 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
- Закріплення під час активних транзакцій та виразів
- Автоматичний відкат та очищення при завершенні корутини
- Управління обліковими даними у фабриці