PHP 에서 pthread 확장 사용

2954 단어 PHPpthread넓히다
1.스 레 드 생 성 및 사용
1.Thread 클래스
기본 생 성 및 사용:

<?php
//    Thread          MyThread
class MyThread extends Thread{
    //      
    function __construct(){
    }
    //  run  (              )
    function run(){
    }
}

//           java  
$mt = new MyThread();
$mt->start();
물론 스 레 드 클래스 로 서 스 레 드 상 태 를 조회 하고 스 레 드 를 관리 하 는 다른 방법 이 있어 야 합 니 다.

<?php
//          id
Thread::getCreatorId 
//      id
Thread::getCurrentThreadId
//        
Thread::getCurrentThread 
//       
Thread::join
//         (   join)
Thread::isJoined
//      
Thread::kill
2.Worker 클래스
Worker 클래스 의 부모 클래스 는 Thread 클래스 이기 때문에 기본 적 인 용법 은 Thread 와 같 습 니 다.한편,Worker 류 는 Thread 류 에 비해 스 레 드 재 활용 기능 을 추 가 했 습 니 다.(스 레 드 를 없 애 는 데 소모 되 는 자원 을 낮 추기 위해)보통 Stackable 류 와 연 결 됩 니 다.즉,Worker 류 는 스 레 드 로 도 사용 할 수 있 고 작업 의 용기 로 도 사용 할 수 있 습 니 다.예 를 들 어:

<?php
class Task extends Stackable{

    function __construct($no){
        $this->no = $no;
    }

    function run(){
        echo "task{$this->no}:run".PHP_EOL;

    }
}

class MyWork extends Worker{

    function __construct(){

    }

    function run(){


    }

}

$t1= new Task(1);
$t2= new Task(2);
$t3= new Task(3);
$my = new MyWork();
$my->stack($t1);
$my->stack($t2);
$my->start();
$my->stack($t3);
최종 출력:
task1:run
task2:run
task3:run
물론 Worker 클래스 는 부모 스 레 드 를 관리 하 는 다른 방법 도 있 습 니 다.

//           
Worker::getStacked 
//  worker    
Worker::isShutdown
//  worker     
Worker::isWorking
//    worker
Worker::shutdown
//     
Worker::stack
//     ( api   ,  )
Worker::unstack
2.PHP 스 레 드 에 부 딪 힌 문제 와 주의 점
1.스 레 드 류 의 속성 은 해시 표(배열)작업 을 직접 할 수 없습니다.예 를 들 어:

//      
$this->var1["hello"] = "world"; 
//  
$this->var1 = ["hello"=>"world"];
왜?스 레 드 클래스 속성의 할당 은 직렬 화 를 통 해 이 루어 지기 때문에 본질 적 으로 직렬 화 된 데 이 터 를 저장 하기 때문에 PHP 에서 해시 표(배열)를 직접 조작 하 는 작업 은 지원 되 지 않 습 니 다.
2.스 레 드 클래스 의 속성 은"패키지 함수"일 수 없습니다.
원인:패 킷 함수 가 직렬 화 되 지 않 습 니 다.따라서 스 레 드 에'리 셋 함수'를 사용 하려 면 스 레 드 를 포기 하 세 요.
3.스 레 드 대상 이 phop 의 두 번 째 공간 을 열 었 습 니 다.
(1)스 레 드 가 생 성 된 후에 부모 스 레 드 의 변수 에 접근 할 수 없습니다.예 를 들 어$GLOBALS 나 global 등 용법 으로 부모 스 레 드 의 전역 변 수 를 조작 할 수 없습니다.이것 은 스 레 드 안전 문 제 를 고려 한 것 입 니 다.
(2)그러나 부모 스 레 드 는 하위 스 레 드 대상 의 내용 에 접근 할 수 있 습 니 다.
PHP 에서 pthread 확장 을 사용 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 PHP pthread 확장 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기