Panoramica

La sezione architettura descrive la progettazione interna dei componenti chiave di TrueAsync a livello di codice C: strutture dati, algoritmi, integrazione con Zend Engine e interazione tra il core PHP e l'estensione async.

Questi materiali sono destinati agli sviluppatori che vogliono capire come funziona TrueAsync "sotto il cofano" o che intendono creare le proprie estensioni.

TrueAsync ABI

Il cuore dell'ABI asincrona: puntatori a funzione, sistema di registrazione delle estensioni, stato globale (zend_async_globals_t), macro ZEND_ASYNC_* e versionamento dell'API.

Coroutine, Scheduler e Reactor

Progettazione interna dello scheduler delle coroutine e del reactor degli eventi: code (buffer circolari), cambio di contesto tramite fiber, microtask, loop degli eventi libuv, pool di contesti fiber e arresto controllato.

Eventi e Modello degli Eventi

zend_async_event_t -- la struttura dati base da cui ereditano tutte le primitive asincrone. Sistema di callback, ref-counting, riferimento agli eventi, flag, gerarchia dei tipi di evento.

Waker -- Meccanismo di Attesa e Risveglio

Il Waker è il collegamento tra una coroutine e gli eventi. Stati, resume_when, callback delle coroutine, consegna degli errori, struttura zend_coroutine_t e switch handler.

Garbage Collection nel Contesto Asincrono

Come il GC di PHP funziona con coroutine, scope e contesti: handler get_gc, attraversamento dello stack fiber, coroutine zombie, contesto gerarchico e protezione contro i riferimenti circolari.

Componenti

Async\Pool

Pool di risorse universale. Argomenti trattati:

  • Struttura dati a due livelli (ABI nel core + interna nell'estensione)
  • Algoritmi di acquire/release con una coda FIFO di coroutine in attesa
  • Healthcheck tramite timer periodico
  • Circuit Breaker con tre stati
  • API C per le estensioni (macro ZEND_ASYNC_POOL_*)

PDO Pool

Layer specifico per PDO sopra Async\Pool. Argomenti trattati:

  • Connessione template e creazione differita delle connessioni reali
  • Binding delle connessioni alle coroutine tramite HashTable
  • Pinning durante transazioni e statement attivi
  • Rollback automatico e pulizia al completamento della coroutine
  • Gestione delle credenziali nella factory