PHP에서 다중 프로세스를 구현하는 방법: pcntl 및 posix 확장을 통해. 필요에 따라 pcntl_fork() 함수를 사용하여 하위 프로세스를 생성하고 pcntl_wait() 함수를 사용하여 현재 프로세스를 차단할 수 있습니다.
php 다중 프로세스에는 pcntl, posix 확장 지원이 필요합니다.
다중 프로세스 구현은 cli 모드에서만 가능합니다. 웹 서버 환경에서는 예상치 못한 결과가 발생할 수 있습니다.
(추천 동영상 튜토리얼: php 동영상 튜토리얼)
멀티 프로세스 핵심 기능:
pcntl_fork(하위 프로세스 생성), pcntl_wait(현재 프로세스 차단)
자세한 소개:
pcntl_fork:
두 번 반환 call 은 상위 프로세스의 하위 프로세스 pid를 반환하고 하위 프로세스에서는 0을 반환하며 오류 시 -1을 반환합니다.
pcntl_wait ( int &$status [, int $options ] ):
하위 프로세스가 종료되거나 현재 프로세스를 종료하라는 신호를 받을 때까지 현재 프로세스를 차단합니다. 이는 현재 프로세스를 종료하라는 신호이며 하위 프로세스가 종료하기 위해 전송한 SIGCHLD는 계산되지 않습니다. $status를 사용하여 자식 프로세스의 상태 코드를 반환하고, 두 번째 매개 변수를 지정하여 차단 상태에서 호출되는지 여부를 나타낼 수 있습니다. 함수 반환 값은 자식 프로세스가 없는 경우입니다. 반환 값은 -1입니다.
비차단 방식으로 호출되면 이 함수는 하위 프로세스가 실행 중이지만 종료되지 않은 경우에도 0을 반환할 수 있습니다.
pcntl_waitpid ( int $pid , int &$status [, int $options ] )
함수는 pcntl_wait와 동일하지만 차이점은 waitpid가 지정된 pid를 기다리는 하위 프로세스라는 것입니다. pid가 -1이면 pcntl_waitpid는 pcntl_wait와 동일합니다. 하위 프로세스의 상태 정보는 pcntl_wait 및 pcntl_waitpid 함수의 $status에 저장됩니다.
(관련 튜토리얼 추천:
php 그래픽 튜토리얼php에서는 항상 고정된 수의 하위 프로세스가 실행됩니다.
필요에 따라 pcntl_fork(하위 프로세스 생성), pcntl_wait(현재 프로세스 차단) 및 기타 핵심 기능을 사용하세요
코드 구현:
<?php //最大的子进程数量 $maxChildPro = 8; //当前的子进程数量 $curChildPro = 0; //当子进程退出时,会触发该函数,当前子进程数-1 function sig_handler($sig) { global $curChildPro; switch ($sig) { case SIGCHLD: echo 'SIGCHLD', PHP_EOL; $curChildPro--; break; } } //配合pcntl_signal使用,简单的说,是为了让系统产生时间云,让信号捕捉函数能够捕捉到信号量 declare(ticks = 1); //注册子进程退出时调用的函数。SIGCHLD:在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程。 pcntl_signal(SIGCHLD, "sig_handler"); while (true) { $curChildPro++; $pid = pcntl_fork(); if ($pid) { //父进程运行代码,达到上限时父进程阻塞等待任一子进程退出后while循环继续 if ($curChildPro >= $maxChildPro) { pcntl_wait($status); } } else { //子进程运行代码 $s = rand(2, 6); sleep($s); echo "child sleep $s second quit", PHP_EOL; exit; } }
위 내용은 PHP에서 다중 프로세스를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!