使用PHP进行多线程处理
在 PHP 中,多线程可能并不是很受需要。
在父进程中,我创建了6个子进程。
每个子进程内部生成一个1到10的随机数,
如果这个数等于10,则结束自己的进程,这是一个简单的操作。
<?php
define("MAX_PROCESS",6);
define("TIMEOUT",10);
$oControl = new main();
class main
{
private $_MAX_PROCESS = MAX_PROCESS;
private $_TIMEOUT = TIMEOUT;
function main()
{
for( $i = 1; $i<= $this->_MAX_PROCESS; $i++ ) {
$pid = pcntl_fork();
if ( $pid == -1 ) {
die( "fork できません\n" );
} else if ( $pid ) {
$pids[ $pid ] = TRUE;
if ( count( $pids ) >= $this->_MAX_PROCESS ) {
unset( $pids[ pcntl_waitpid( -1, $status, WUNTRACED ) ] );
}
} else {
$this->childProcess($i);
}
}
while ( count( $pids ) > 0 ) {
unset( $pids[ pcntl_waitpid( -1, $status, WUNTRACED ) ] );
}
}
function childProcess($my_number)
{
while(1){
// 強制終了時間を指定
pcntl_alarm( $this->_TIMEOUT );
$rand = mt_rand(1,10);
$message = "number=$my_number rand=$rand";
if( $rand == $this->_TIMEOUT ) {
$message .= " end";
}
$message .= PHP_EOL;
echo $message;
sleep( $rand );
}
return true;
}
}