>  기사  >  백엔드 개발  >  PHP의 Pcntl 다중 프로세스 확장 사용법 소개

PHP의 Pcntl 다중 프로세스 확장 사용법 소개

不言
不言앞으로
2019-02-25 10:08:172814검색

이 기사는 PHP의 Pcntl 다중 프로세스 확장의 사용법을 소개합니다. 이는 특정 참고 가치가 있습니다. 도움이 필요한 친구가 도움이 되기를 바랍니다.

PHP는 Pcntl 확장을 제공합니다. Pcntl은 Linux 프로세스를 기반으로 합니다. Windows 시스템에는 현재 이 확장이 없습니다. 이는 시간이 많이 걸리는 작업을 처리하는 데 사용됩니다. , 구독 이메일, 문자 메시지, 현장 서신 등을 보내는 등

샘플 코드:

코드는 Laravel 프레임워크를 기반으로 하며, 코드의 이 부분을 허용하려면 이 프레임워크를 사용하는 것이 좋습니다.

public function index(Request $request)

    {

        pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。  

        $max = 8000;

        $workers = 10;

        

        $pids = array();

        for($i = 0; $i < $workers; $i++){

            $pids[$i] = pcntl_fork();

            $pid = posix_getpid();

            switch ($pids[$i]) {

                case -1:

                    echo "fork error : {$i} \r\n";

                    exit;

                case 0:

                    $param = array(

                        &#39;lastid&#39; => $max / $workers * $i,

                        'maxid' => $max / $workers * ($i+1),

                    );

                    $this->doSomething($pid, $param);

                    exit;

                default:

                    break;

            }

        }

        

        foreach ($pids as $i => $pid) {

            if($pid) {

                //父进程会得到子进程号,所以这里是父进程执行的逻辑  

                //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:  

                pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。

                //pcntl_waitpid($pid, $status);

            }

        }

    }



// 可以看到那个子进程在处理哪些数据

    public function doSomething($filename, $param)

    {

        for ($i = $param['lastid']; $i < $param['maxid']; $i++) {

            $path = "./test/";

            if (!is_dir($path)){

                mkdir($path, 0777, true);

            }
            $content = $i . '|';
            $file = $path . $filename . ".txt";
            file_put_contents($file, $content, FILE_APPEND);
        }
    }

더 많은 제안은 문서, 프로세스 및 스레드를 읽는 것입니다. 콘텐츠가 많기 때문에 읽고 배워야 합니다

위 내용은 PHP의 Pcntl 다중 프로세스 확장 사용법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제