使用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;
    }
}
广告
将在 10 秒后关闭
bannerAds