php pthreads 列子:1

来源:互联网 发布:知乎 kindle 编辑:程序博客网 时间:2024/05/10 20:35
class vote extends Thread {    public $res    = '';    public $url    = array();    public $name   = '';    public $runing = false;    public $lc     = false;    public function __construct($name) {        $this->res    = '暂无,第一次运行.';        $this->param    = 0;        $this->lurl   = 0;        $this->name   = $name;        $this->runing = true;        $this->lc     = false;    }    public function run() {        while ($this->runing) {            if ($this->param != 0) {                $nt          = rand(1, 10);                echo "线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据.\n";                $this->res   = rand(100, 999);                sleep($nt);                $this->lurl = $this->param;                $this->param   = '';            } else {                echo "线程[{$this->name}]等待任务..\n";            }            sleep(1);        }    }}//这里创建线程池.$pool[] = new vote('a');$pool[] = new vote('b');$pool[] = new vote('c');//启动所有线程,使其处于工作状态foreach ($pool as $w) {    $w->start();}//派发任务给线程for ($i = 1; $i < 10; $i++) {    $worker_content = rand(10, 99);    while (true) {        foreach ($pool as $worker) {            //参数为空则说明线程空闲            if ($worker->param=='') {                $worker->param = $worker_content;                echo "[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}].\n";                break 2;            }        }        sleep(1);    }}echo "所有线程派发完毕,等待执行完成.\n";//等待所有线程运行结束while (count($pool)) {    //遍历检查线程组运行结束    foreach ($pool as $key => $threads) {        if ($worker->param=='') {            echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].\n";            echo "[{$threads->name}]线程运行完成,退出.\n";            //设置结束标志            $threads->runing = false;            unset($pool[$key]);        }    }    echo "等待中...\n";    sleep(1);}echo "所有线程执行完毕.\n";
0 0
原创粉丝点击