Огляд

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