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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.