php swooleマルチプロセス/マルチスレッド例

1508 ワード

swooleのマルチスレッドは実はマルチプロセスで、プロセスの作成が多すぎて切替のオーバーヘッドが大きいので、pthreadsを使うことができればpthreadsを使うことをお勧めします.php 7 ntsバージョンを使っているのでpthreadsは使えません.
swooleの例は次のとおりです.
useQueue(0, 2);
    $pid = $process->start();

    //       
    $process->write('index:'.$i);

    $process->push('         ');
    //             
    $workers[$pid] = $process;
}


/**
 *      
 * @param  swoole_process $worker [description]
 * @return [type]                 [description]
 */
function callback_function(swoole_process $worker)
{
    $recv = $worker->pop();
    echo "      : {$recv}".PHP_EOL;
    //get guandao content
    $recv = $worker->read();
    $result = doTask();
    
    echo PHP_EOL.$result.'==='.$worker->pid.'==='.$recv;

    $worker->exit(0);
}


/**
 *   /     
 */
while(1){
    $ret = swoole_process::wait();
    if ($ret){// $ret      code        ,
        $pid = $ret['pid'];
        echo PHP_EOL."Worker Exit, PID=" . $pid . PHP_EOL;
    }else{
        break;
    }
}


/**
 * doTask
 * @return [type] [description]
 */
function doTask()
{
    sleep(2);
    return true;
}