Differenze tra programmazione sincrona e asincrona

Prima di discutere i meriti del PHP asincrono, esaminiamo rapidamente le differenze tra i modelli di programmazione sincrona e asincrona.

Il codice sincrono è sequenziale. Le singole attività devono essere completate prima di poterne avviare un’altra. Nel codice asincrono, è possibile completare più attività contemporaneamente, il che può migliorare notevolmente le prestazioni dell’applicazione e l’esperienza dell’utente.

Cos’è il PHP sincrono

PHP sincrono si riferisce al codice PHP che viene scritto usando il modello sincrono. PHP è stato originariamente creato per supportare lo sviluppo sincrono, quindi la maggior parte degli sviluppatori PHP è abituata a scrivere solo codice sincrono

Cos’è il PHP asincrono

PHP asincrono si riferisce al codice PHP che viene scritto utilizzando il modello asincrono. Usando estensioni come Swoole o un framework PHP come ReactPHP, puoi fare in modo che PHP accetti le richieste e le risposte in modo asincrono, usando i loop di eventi.

Qual è la differenza principale?
In molte applicazioni, la  CPU rimane inattiva per molto tempo durante le attività di I / O. L’idea alla base del PHP asincrono è quella di sfruttare appieno tutti i cicli CPU disponibili mantenendo in background attività I / O non bloccanti e lasciando che la CPU elabori altre attività mentre è in attesa di dati e istruzioni necessarie per completare l’I/O.

L’uso del PHP asincrono porta a prestazioni fulminee rispetto alle applicazioni scritte utilizzando il PHP sincrono. In alcuni benchmark, è possibile aumentare la produttività di 100 volte, abilitando il PHP asincrono utilizzando Swoole, anziché utilizzare un acceleratore di processo come php-fpm in codice sincrono. Questo perché php-fpm non supporta comunicazioni asincrone.

Quale PHP dovrei usare ?

Per utilizzare PHP asincrono, il tuo codice deve supportarlo. La maggior parte delle estensioni a cui gli sviluppatori PHP sono abituati, bloccano il processo – noto anche come blocco I / O – che rendono impossibile il modello asincrono.

Ad esempio, per sfruttare Swoole, quando viene rilevata una chiamata che richiede I / O, è necessario inviare quella chiamata in background e continuare con le istruzioni successive. Quando i dati tornano dalla chiamata I / O, Swoole deve restituire il controllo alla chiamata I / O che è stata inviata in background, in modo da poter consegnare i dati richiesti al processo

La riscrittura del codice per supportare i processi asincroni potrebbe richiedere un importante refactoring. Tuttavia, il risparmio di tempo che guadagnerai in futuro potrebbe valerne la pena.

Progetti per iniziare con PHP asincrono
Swoole – Coroutine PHP framework di programmazione ansicono.
Reactphp – I / O event-driven, non bloccante con PHP.
Amphp – Framework di concorrenza non bloccante per PHP.