PHP pthreads v3 사용 중인 구덩이 와 주의 점 분석

4802 단어 PHPpthreads
본 논문 의 사례 는 PHP pthreads v3 사용 중의 일부 구덩이 와 주의 점 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.하위 스 레 드 는 부모 스 레 드 의 전역 변 수 를 방문 할 수 없 지만 부모 스 레 드 는 하위 스 레 드 의 변 수 를 방문 할 수 있 습 니 다.

<?php

class Task extends Thread
{
  public $data;

  public function run()
  {
    global $num;
    var_dump($num);
    $this->data = 'abc';

    //    null
    var_dump($GLOBALS);
    $GLOBALS['test'] = 'def';
  }
}

//         ,          
//php      ,         ,           
//         ,                  。
$num = 666;

$GLOBALS['test'] = 'test';

$t = new Task();
$t->start() && $t->join();

//             
var_dump($t->data);
결 과 는 다음 과 같다.

2.하위 스 레 드 는 부모 스 레 드 의 변 수 를 수정 할 수 없습니다.

<?php

class Task extends Thread
{
  private $data;

  public function __construct(&$data)
  {
    $this->data = $data;
  }

  public function run()
  {
    echo "task data : ", $this->data, "
"; $this->data = 'def'; echo "task data : ", $this->data, "
"; } } $data = 'abc'; // $t = new Task($data); $t->start() && $t->join(); // $data // Task $data // var_dump($data);
결 과 는 다음 과 같다.

3.pthreads v3 버 전 은 구성원 을 익명 함수 로 설정 할 수 있 습 니 다.

<?php

class Task extends Thread
{
  private $call;


  public function __construct()
  {
    //pthreads v3               
    // v2          
    $this->call = function ($param1, $param2) {
      echo "task call param1 : {$param1} param2 : {$param2}
"; }; } public function run() { // ($this->call)("hello", "world"); } } $t = new Task(); $t->start() && $t->join();
결 과 는 다음 과 같다.

4.데이터베이스 연결 자원 에 대해 우 리 는 정적 구성원 으로 성명 해 야 합 니 다.

<?php

class Task extends Thread
{
  private $db;

  public function __construct()
  {
    //       ,   PDO            
    $this->db = new PDO('mysql:dbname=test;host=192.168.33.226', 'root', '');
  }

  public function run()
  {
    $result = $this->db->query("select id,name from tb_user");
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
      echo "{$row['id']}\t{$row['name']}
"; } } } $t = new Task(); $t->start() && $t->join();
결 과 는 다음 과 같다.

코드 수정 은 다음 과 같 습 니 다.

<?php

class Task extends Thread
{
  //            ,       ,            
  private static $db;

  //     __construct()      $db     ,    null,        
  public static function getConn()
  {
    if (!is_resource(self::$db)) {
      self::$db = new PDO('mysql:dbname=test;host=192.168.33.226', 'root', '');
    }
    return self::$db;
  }

  public function run()
  {
    $result = self::getConn()->query("select id,name from tb_user");
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
      echo "{$row['id']}\t{$row['name']}
"; } } } $t = new Task(); $t->start() && $t->join();
결 과 는 다음 과 같다.

마지막 으로 pthreads 이후 버 전 업그레이드 에 문제 가 없 을 것 임 을 설명 합 니 다.
제 phop 버 전 은 7.2.4 이 고 pthreads 버 전 은 3.1.7 dev 입 니 다.


더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기