php pthread 實例

<?php 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";
相關文章
相關標籤/搜索