本篇文章給大家分享的是有關(guān)如何在php多進(jìn)程中實(shí)現(xiàn)阻塞與非阻塞,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

通過pcntl_fork來創(chuàng)建子進(jìn)程,使用pcntl_wait和pcntl_waitpid來回收子進(jìn)程。
子進(jìn)程退出后,父進(jìn)程沒有及時(shí)回收,就會(huì)產(chǎn)生僵尸進(jìn)程。
例1:
<?php
define('FORK_NUMS', 5);
$pids = array();
//我們創(chuàng)建5個(gè)子進(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個(gè)子進(jìn)程,父進(jìn)程會(huì)阻塞著等待子進(jìn)程退出,然后創(chuàng)建下一個(gè)子進(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個(gè)子進(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)程中實(shí)現(xiàn)阻塞與非阻塞,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文名稱:如何在php多進(jìn)程中實(shí)現(xiàn)阻塞與非阻塞-創(chuàng)新互聯(lián)
鏈接分享:http://chinadenli.net/article32/diidpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、移動(dòng)網(wǎng)站建設(shè)、定制網(wǎng)站、自適應(yīng)網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容