>  기사  >  백엔드 개발  >  PHP는 비차단 및 다중 스레드 프로그래밍을 구현합니다.

PHP는 비차단 및 다중 스레드 프로그래밍을 구현합니다.

不言
不言원래의
2018-07-20 17:09:582339검색

PHP 다중 스레드 프로그래밍 구현 및 비차단 구현. PHP는 기본적으로 멀티스레딩을 지원하지 않습니다. 멀티스레딩을 사용하려면 설치 후 멀티스레딩 프로그래밍을 수행할 수 있습니다.

스레드 개념

스레드는 운영 체제에서 예약할 수 있는 가장 작은 단위입니다.

멀티 스레드 프로그램 단일 스레드 프로그램보다 낫습니다. 운영 체제에 의해 예약될 확률이 높으므로 다중 스레드 프로그램은 일반적으로 단일 스레드 프로그램보다 효율적입니다.

멀티 스레드 프로그램의 다중 스레드 멀티 코어 CPU의 여러 코어에서 동시에 실행할 수 있습니다.

스레드 생성 및 전환에 따른 시스템 오버헤드는 프로세스보다 적습니다. 어느 정도 다중 프로세스보다 더 효율적입니다.

스레드는 공유 메모리 공간으로 탄생하며 프로세스 IPC로 인해 새로운 복잡성이 도입되는 것을 방지하여 스레드 간의 통신이 더 간단해집니다.

스레드를 사용해야 하는 경우

I/O 차단으로 인해 운영 체제에서 작업 예약이 발생하고 현재 작업이 차단되므로 I/in 코드 O가 많은 경우 멀티스레딩을 사용하면 코드가 병렬화될 수 있습니다. 🎜#

스레드 사용의 좋은 점과 나쁜 점

The PHP가 구현하는 스레드 안전성은 주로 TSRM 메커니즘을 사용하여 전역 변수와 정적 변수를 분리하고, 변수와 정적 변수는 각 스레드마다 복사되며, 각 스레드는 메인 스레드의 백업을 사용하므로 변수 충돌 및 스레드 안전 문제를 방지합니다.

하위 스레드가 실행되기 시작하면 메인 스레드는 더 이상 하위 스레드의 실행 세부 정보를 조정할 수 없습니다.

확장 설치

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

./configure --enable-maintainer-zts --with-tsrm-pthreads

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);
    }
}
$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 비차단

fastcgi_finish_ 사용 요청( )

echo "program start...";
fastcgi_finish_request();
sleep(1);echo 'debug1...';
sleep(10);echo 'debug2...';
fsockopen() 사용stream_set_blocking()

cURL 사용

$cmh = cur_multi_init();


Gearman/Swoole 확장 사용

캐시 및 대기열 사용
redis

시스템 명령 호출

$cmd = 'nohup php ./processd.php $someVar > ;/dev/null &';


pcntl_fork() 사용

PHP 기본 지원
yield

관련 권장 사항: #🎜 🎜 #


php 설치 스레드 다중 스레드 확장, phpthreads 다중 스레드

위 내용은 PHP는 비차단 및 다중 스레드 프로그래밍을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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