程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP使用Pthread實現的多線程操作實例

PHP使用Pthread實現的多線程操作實例

編輯:PHP綜合

本文實例講述了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";

希望本文所述對大家php程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved