This article describes the PHP's pcntl multi-process usage example. Share it with everyone for your reference. The specific analysis is as follows:
PHP can also process a transaction using multiple processes using the PCNTL series of functions. For example, I need to obtain 800,000 pieces of data from the database and then do a series of subsequent processing. At this time, should I use a single process? You can wait until today next year. So you should use the pcntl function.
Suppose I want to start 20 processes and divide 1-80w of data into 20 parts. The main process waits for all child processes to finish before exiting:
$max = 800000; $workers = 20; $pids = array(); for($i = 0; $i < $workers; $i++){ $pids[$i] = pcntl_fork(); switch ($pids[$i]) { case -1: echo "fork error : {$i} \r\n"; exit; case 0: $param = array( 'lastid' => $max / $workers * $i, 'maxid' => $max / $workers * ($i+1), ); $this->executeWorker($input, $output, $param); exit; default: break; } } foreach ($pids as $i => $pid) { if($pid) { pcntl_waitpid($pid, $status); } }
When pcntl_fork comes out, a pid value will be returned. This pid is 0 in the child process, and is the pid of the child process in the parent process (>0). If the pid is -1, it means that the fork went wrong. .
Use a $pids array to let the main process wait for all processes to complete before ending
I hope this article will be helpful to everyone’s PHP programming design.