2015-06-16 20 views
6

Come React PHP gestisce l'I/O non bloccante asincrono?Come React PHP gestisce l'I/O non bloccante asincrono?

Nodejs utilizza la coda eventi che gestisce l'I/O su thread diversi. Usa libuv per questo. Come in PHP non c'è qualcosa del genere, How React gestisce un processo I/O non bloccante su un singolo thread?

+0

possibile duplicato di [ReactPHP è davvero asincrono?] (Http://stackoverflow.com/questions/22502118/reactphp-is-truely-asynchronous) – Blizz

risposta

12

React PHP fornisce il ciclo di eventi primario dell'applicazione; devi comunque scrivere il tuo codice in modo non bloccante poiché è tutto su un thread. Le possibili soluzioni a tutto questo ruotano attorno all'uso di php in modo diverso da quello che sono sicuro che la maggior parte degli sviluppatori PHP sono abituati a ... Anche se React PHP fornisce il ciclo principale; la maggior parte delle librerie React PHP sono le implementazioni per socket/streaming/promesse/ecc. Questi hanno tutti metodi impiegati per ottenere un accesso non bloccante all'I/O; in genere tramite l'utilizzo di stream_set_blocking (http://php.net/manual/en/function.stream-set-blocking.php)

Le altre opzioni includono la programmazione di qualcosa di simile a un FSM (https://en.wikipedia.org/wiki/Finite-state_machine); che gli consente di aggiornare continuamente lo stato attuale mentre procede; ogni volta consentendo l'esecuzione di determinati blocchi di codice, quindi rinunciando a qualsiasi altra parte del ciclo. Implementare essenzialmente il proprio time-slicing (https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice)

Un'altra opzione è implementare i thread (http://php.net/manual/en/book.pthreads.php) che di solito non è abilitato di default; E l'ultima opzione a cui posso pensare è usare il controllo di processo su fork/start/control altri processi (http://php.net/manual/en/intro.pcntl.php) che è abilitato solo su sistemi * nix; che consente al CPU host di controllare il time slicing; ti verrà richiesto di configurare la tua applicazione in modo da essere thread-safe, comunicare con code di messaggi o qualche altro meccanismo.

tldr; Usa l'architettura dell'applicazione per non causare il blocco di php, imposta i tuoi stream in modo da non bloccarli o usa il controllo thread/process per gestire il tuo multi-threading.