Sono confuso su pcntl_fork
in PHP.Come funziona pcntl_fork in PHP?
So che fa multi-threading, ma come funziona e come lo userei in uno script?
Sono confuso su pcntl_fork
in PHP.Come funziona pcntl_fork in PHP?
So che fa multi-threading, ma come funziona e come lo userei in uno script?
PCNTL non può creare thread. È solo "forca" l'attuale processo PHP. Cosa significa? Quando chiami pcntl_fork()
, il processo corrente viene diviso in due processi. L'intero spazio dei nomi del processo padre viene copiato nel figlio ed entrambi i processi continuano con l'esecuzione in parallelo con una sola differenza: pcntl_fork()
restituisce il PID secondario in parent e 0
in child.
Alcuni indizi:
MySQL server has gone away
da tutti i processi biforcati quando prima si chiude la connessione.Ecco esempio from documentation:
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
Ma ricordate, PHP è solo linguaggio di scripting. Non è progettato per il calcolo parallelo. Si potrebbe fare un lavoro migliore con CRON, code di messaggi o programmi contemporaneamente in linguaggio di livello inferiore, a seconda delle esigenze.
Il programma PHP biforcuto è molto difficile da leggere, comprendere e eseguire il debug. Mantenere quel programma sarà un incubo.
Non fare errori ed evitare di biforcarsi. Non ne hai bisogno. Quello di cui hai veramente bisogno è un task manager asincrono. Buone notizie, non v'è RabbitMQ e nice tutorial ;-) Potete anche provare promettendo biblioteca RabbitMQ chiamato Bunny
PS: Usando le code di messaggi invece di biforcazione ti dà un altro vantaggio. È possibile elaborare la coda con più server e ridimensionarla orizzontalmente man mano che il traffico aumenta.
Grazie la risposta mi ha aiutato :) –
Vedere http://stackoverflow.com/q/19546588/632951 – Pacerier