ホームページ  >  記事  >  バックエンド開発  >  PHP の Pcntl マルチプロセス拡張機能の使用法の概要

PHP の Pcntl マルチプロセス拡張機能の使用法の概要

不言
不言転載
2019-02-25 10:08:172765ブラウズ

この記事は、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。