Home  >  Article  >  Backend Development  >  Creation and use of php multi-threading

Creation and use of php multi-threading

墨辰丷
墨辰丷Original
2018-06-06 09:49:272300browse

This article mainly introduces the creation and use of PHP multi-threading. Interested friends can refer to it. I hope it will be helpful to everyone.

The example describes the multi-threaded operation implemented by PHP using Pthread. Share it with everyone for your reference, the details are as follows:


<?php 
class vote extends Thread {
  public $res  = &#39;&#39;;
  public $url  = array();
  public $name  = &#39;&#39;;
  public $runing = false;
  public $lc   = false;
  public function __construct($name) {
    $this->res  = &#39;暂无,第一次运行.&#39;;
    $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  = &#39;&#39;;
      } else {
        echo "线程[{$this->name}]等待任务..\n";
      }
      sleep(1);
    }
  }
}
//这里创建线程池.
$pool[] = new vote(&#39;a&#39;);
$pool[] = new vote(&#39;b&#39;);
$pool[] = new vote(&#39;c&#39;);
//启动所有线程,使其处于工作状态
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==&#39;&#39;) {
        $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==&#39;&#39;) {
      echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].\n";
      echo "[{$threads->name}]线程运行完成,退出.\n";
      //设置结束标志
      $threads->runing = false;
      unset($pool[$key]);
    }
  }
  echo "等待中...\n";
  sleep(1);
}
echo "所有线程执行完毕.\n";



Summary: That’s it for this article The entire content of the article is hoped to be helpful to everyone's study.

Related recommendations:

Tips for using Enum in PHP

How to generate PDF files in PHP

How to solve Chinese garbled characters in PHP MPDF


##

The above is the detailed content of Creation and use of php multi-threading. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn