>백엔드 개발 >PHP 문제 >PHP에서 멀티스레딩을 구현하는 방법

PHP에서 멀티스레딩을 구현하는 방법

(*-*)浩
(*-*)浩원래의
2019-10-10 15:15:003747검색

PHP는 기본적으로 멀티스레딩을 지원하지 않습니다. 멀티스레딩을 사용하려면 pthread 확장을 설치하려면 --enable-maintainer-zts 매개변수를 사용해야 합니다. PHP를 다시 컴파일하려면 이 매개변수는 PHP를 사용할 때 컴파일 사용 스레드 안전성을 지정합니다.

PHP에서 멀티스레딩을 구현하는 방법

PHP 구현

PHP 구현 스레드 보안 주로 TSRM 메커니즘을 사용하여 전역 변수와 정적 변수를 각 스레드에 복사합니다. 각 스레드는 기본 스레드의 백업을 사용하므로 스레드 안전 문제가 없습니다. (추천 학습: PHP 비디오 튜토리얼)

PHP의 멀티 스레드 캡슐화는 스레드 안전성을 보장하며 프로그래머는 읽기를 피하기 위해 전역 변수에 다양한 잠금을 추가하는 것을 고려할 필요가 없습니다. 쓰기 충돌이 제거되고 동시에 오류 가능성이 줄어들어 작성된 코드가 더욱 안전하게 만들어집니다.

하지만 결과적으로 하위 스레드가 실행되기 시작하면 메인 스레드는 더 이상 하위 스레드의 실행 세부 정보를 조정할 수 없으며 스레드는 전역 변수를 통해 스레드 간에 전달되는 메시지를 잃게 됩니다. 어느 정도 능력.

동시에 PHP가 스레드 안전 옵션을 켠 후 TSRM 메커니즘을 사용하여 변수를 할당하고 사용할 때 추가 손실이 발생합니다. 따라서 다중이 필요하지 않은 PHP 환경에서는. 스레딩을 사용하려면 PHP의 ZTS(비 스레드 안전) 버전을 사용하는 것이 좋습니다.

예제 코드

다음은 특정 인터페이스를 요청하는 데 사용되는 스레드 클래스입니다. 다음으로 이를 기반으로 두 개의 다중 스레드 애플리케이션 예제를 작성합니다.

class Request extends Thread {
    public $url;
    public $response;
    public function __construct($url) {
        $this->url = $url;
    }
    public function run() {
        $this->response = file_get_contents($this->url);
    }
}

Asynchronous request

분할 동기 요청을 여러 스레드로 프로그램 실행 효율성을 향상시킵니다.

$chG = new Request("www.google.com");
$chB = new Request("www.baidu.com");
$chG ->start();
$chB ->start();
$chG->join();
$chB->join();

$gl = $chG->response;
$bd = $chB->response;

위 내용은 PHP에서 멀티스레딩을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.