PHP 初試多線程pthreads擴展

pthread是unix-like多線程支持庫,這裏能夠做爲php的多線程擴展支持庫。php

我下載的是php_pthreads-2.0.10-5.3-ts-vc9-x86.zip,電腦是64bit,也就是說pthreads在64bit系統上兼容32bit,此版本支持php5.3.x線程安全(ts)版本,固然也名稱標註了5.3-ts版本。html

 

注意:下載x64位版本加載不成功的同窗,能夠打開apache的log看看是什麼問題,若是問題不清楚,不妨下載x86版本的試試也行啊apache

 

在這裏安裝方式請參閱編程

PHP安裝pthreads多線程擴展教程安全

學習請參考自帶的Sample或者參考 多線程

PHP 高級編程之多線程學習

 

注意:不要安裝太新的版本,不然有可能安裝不成功,必定要和php的版本匹配。測試

 

來段代碼測試一下:this

<?php
error_reporting(E_ALL);
ob_implicit_flush();
header('content-type:text/html;charset=utf-8');


class AsyncTask extends Thread {

  private $arg;
  private $index;

  public function __construct($arg){
    $this->arg = $arg;
    $this->index = 0;
  }
  public function run(){
    if($this->arg){
     
    while($this->index<5)
    {
    	  echo  microtime(true)."--".$this->arg."->ID:".(Thread::getCurrentThreadId())."---index=".$this->index."<br/>";
    	 $this->index++;
    }
    }
  }
}
$threadA = new AsyncTask("WokerA");
$threadB = new AsyncTask("WokerB");
if($threadA->start() && $threadB->start())
 {
 	$threadA->join();
	$threadB->join();
 	$index = 0;
 	while($index<5){
 	    echo "<font color='red'>".microtime(true)."---主線程ID".(Thread::getCurrentThreadId())."--index=".$index."</font><br/>";
 	    $index++;
 	}
 }else{
 	 echo "failed";
 }


?>


運行結果.net

經過時間輸出對比,咱們發現,主線程和子線程符合多線程運行效果,但對於結果的輸出和時間不匹配,但是每一個線程都有一個緩衝區吧(I Guess)。

相關文章
相關標籤/搜索