您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何在php多進(jìn)程中實現(xiàn)阻塞與非阻塞,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
通過pcntl_fork來創(chuàng)建子進(jìn)程,使用pcntl_wait和pcntl_waitpid來回收子進(jìn)程。
子進(jìn)程退出后,父進(jìn)程沒有及時回收,就會產(chǎn)生僵尸進(jìn)程。
例1:
<?php define('FORK_NUMS', 5); $pids = array(); //我們創(chuàng)建5個子進(jìn)程 for($i = 0; $i < FORK_NUMS; ++$i) { $pids[$i] = pcntl_fork(); if($pids[$i] == -1) { die('fork error'); } else if ($pids[$i]) { pcntl_wait($status); } else { echo getmypid() , " {$i} \r\n"; exit; } }
我們通過for循環(huán)fork出5個子進(jìn)程,父進(jìn)程會阻塞著等待子進(jìn)程退出,然后創(chuàng)建下一個子進(jìn)程。
上述代碼輸出結(jié)果如下:
20081 0
20082 1
20083 2
20084 3
20085 4
但我們創(chuàng)建多進(jìn)程的目的,就是為了能夠并行的處理任務(wù),阻塞的方式并不是我們想看到的。
例2:
<?php define('FORK_NUMS', 5); $pids = array(); //我們創(chuàng)建5個子進(jìn)程 for($i = 0; $i < FORK_NUMS; ++$i) { $pids[$i] = pcntl_fork(); if($pids[$i] == -1) { die('fork error'); } else if ($pids[$i]) { pcntl_wait($status, WNOHANG); } else { echo getmypid() , " {$i} \r\n"; exit; } }
以上就是如何在php多進(jìn)程中實現(xiàn)阻塞與非阻塞,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。