Einführung in die Verwendung der Pcntl-Multiprozesserweiterung von PHP

不言
Freigeben: 2023-04-05 11:52:02
nach vorne
2800 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Verwendung der Pcntl-Mehrprozesserweiterung. Ich hoffe, dass er für Freunde hilfreich ist.

PHP bietet eine Pcntl-Erweiterung, die auf dem Linux-Prozess basiert. Sie wird zur Implementierung einer grundlegenden Multiprozess-Implementierung verwendet zeitaufwändige Aufgabe, wie das Versenden von Abonnement-E-Mails, Textnachrichten, Website-Nachrichten usw.

Beispielcode:

Der Code basiert auf dem Laravel-Framework. Es wird empfohlen, dieses Framework zu verwenden, um diesen Teil des Codes zu ermöglichen.

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);
        }
    }
Nach dem Login kopieren

Weitere Vorschläge sind das Lesen von Dokumenten, Prozessen und Threads. Es gibt viele Inhalte, die Sie lesen und lernen müssen

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung der Pcntl-Multiprozesserweiterung von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!