摘要:最近在學(xué)習(xí)進(jìn)程相關(guān)的知識(shí),配合實(shí)際編碼,覺(jué)得有點(diǎn)意思。閑話(huà)不說(shuō)了,進(jìn)入正題,受網(wǎng)友啟發(fā),如何創(chuàng)建恒定數(shù)量的進(jìn)程呢有進(jìn)程掛了,就創(chuàng)建新的,進(jìn)程,進(jìn)程多了就殺掉幾個(gè)。
最近在學(xué)習(xí)進(jìn)程相關(guān)的知識(shí),配合實(shí)際編碼,覺(jué)得有點(diǎn)意思。這段時(shí)間工作不忙,有時(shí)間自己研究進(jìn)步,感覺(jué)這才是真正的工作啊。相比上一家公司(壓抑的工作飽和度……)感覺(jué)開(kāi)心很多。下一步再研究一下多線程??纯茨懿荒懿迦胍磺f(wàn)條數(shù)據(jù)。
閑話(huà)不說(shuō)了,進(jìn)入正題,受網(wǎng)友啟發(fā),如何創(chuàng)建恒定數(shù)量的進(jìn)程呢?有進(jìn)程掛了,就創(chuàng)建新的,進(jìn)程,進(jìn)程多了就殺掉幾個(gè)。網(wǎng)友文章:16歲的鳴人發(fā)送影分身,分出5個(gè)分身
code如下:
0) { return $pid; } return 0; } while(true) { if (count($child) < $num) { $pid = genarate($minLife, $maxLife); echo "child ".$pid." born ".PHP_EOL; if($pid) { $child[] = $pid; } } else if ( count($child) > $num ) { $pid = array_pop($child); posix_kill($pid,SIGINT); echo "child ".$pid." killed".PHP_EOL; } foreach($child as $k => $pid) { $res = pcntl_waitpid($pid,$status,WNOHANG); if($res == -1 || $res > 0 ) { unset($child[$k]); } } }
當(dāng)$num=1,$maxLife=1,$minLife=1時(shí)
運(yùn)行結(jié)果如下
只要進(jìn)程一掛掉,就會(huì)里面創(chuàng)建新的進(jìn)程。再通過(guò)pcntl_signal注冊(cè)一個(gè)捕獲信號(hào)的回調(diào)方法,應(yīng)該就可以了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22718.html
摘要:進(jìn)程切換太多,影響了了效率應(yīng)該是原因之一。當(dāng)時(shí),十萬(wàn)條記錄,個(gè)進(jìn)程插入總時(shí)間為單進(jìn)程插入萬(wàn)條數(shù)據(jù),耗時(shí)秒,相對(duì)個(gè)進(jìn)程插入萬(wàn)記錄來(lái)說(shuō),耗時(shí)少些。而單進(jìn)程插入萬(wàn)條記錄,耗時(shí),相對(duì)來(lái)說(shuō),是挺慢的了。 個(gè)人在虛擬機(jī)centos7,單核,1G內(nèi)存 /** * 模擬并發(fā)請(qǐng)求,10萬(wàn)次寫(xiě)入數(shù)據(jù)庫(kù) * 拆分為10個(gè)進(jìn)程,每個(gè)進(jìn)程處理一萬(wàn)條插入 */ $total = 10000; $num ...
摘要:對(duì)編程的理解,應(yīng)該到深入到操作系統(tǒng)級(jí)別。進(jìn)程控制,我一直都沒(méi)有接觸,感覺(jué)好高端,今天啃了一下擴(kuò)展的最簡(jiǎn)單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。 對(duì)編程的理解,應(yīng)該到深入到操作系統(tǒng)級(jí)別。進(jìn)程控制,我一直都沒(méi)有接觸,感覺(jué)好高端,今天啃了一下pcntl擴(kuò)展的最簡(jiǎn)單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。新建代碼文件 pcntl_wait.php,如下: $i = 0; ...
摘要:多進(jìn)程消費(fèi)模型父進(jìn)程等待并控制子進(jìn)程的退出思路整理父進(jìn)程開(kāi)啟后,直接獲取到子進(jìn)程的,然后存入數(shù)組,子進(jìn)程出來(lái)后直接開(kāi)啟業(yè)務(wù)消費(fèi)代碼,然后退出,然后父進(jìn)程等待子進(jìn)程退出,全部退出后父進(jìn)程結(jié)束代碼請(qǐng)?jiān)谀J较逻\(yùn)行子進(jìn)程的數(shù)量如果是資源類(lèi)型的變量, 多進(jìn)程消費(fèi)模型 父進(jìn)程等待并控制子進(jìn)程的退出 思路整理 父進(jìn)程開(kāi)啟后,直接獲取到子進(jìn)程的pid,然后存入child數(shù)組,子進(jìn)程fork出來(lái)后直接開(kāi)...
摘要:守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。進(jìn)程組有進(jìn)程組來(lái)唯一標(biāo)識(shí)。且該進(jìn)程組不會(huì)因組長(zhǎng)進(jìn)程的退出而受到影響。 使用函數(shù) pcntl_fork();//創(chuàng)建子進(jìn)程 posix_setsid();//設(shè)置當(dāng)前進(jìn)程為進(jìn)程組長(zhǎng) posix_getpid();//獲取進(jìn)程id 例子 workerman中將進(jìn)程 /** * Run as deamon mode. * * @th...
摘要:用于創(chuàng)建子進(jìn)程。該函數(shù)阻塞當(dāng)前進(jìn)程,只到當(dāng)前進(jìn)程的一個(gè)子進(jìn)程退出或者收到一個(gè)結(jié)束當(dāng)前進(jìn)程的信號(hào)。注意處需要注意子進(jìn)程需要防止子進(jìn)程也進(jìn)入循環(huán)。如果沒(méi)有,最終創(chuàng)建的子進(jìn)程不只個(gè)。 本系列文章將向大家講解pcntl_*系列函數(shù),從而更深入的理解進(jìn)程相關(guān)知識(shí)。 PCNTL在PHP中進(jìn)程控制支持默認(rèn)是關(guān)閉的。您需要使用 --enable-pcntl 配置選項(xiàng)重新編譯PHP的 CGI或CLI版本...
閱讀 2750·2023-04-25 22:15
閱讀 1816·2021-11-19 09:40
閱讀 2161·2021-09-30 09:48
閱讀 3236·2021-09-03 10:36
閱讀 2037·2021-08-30 09:48
閱讀 1872·2021-08-24 10:00
閱讀 2739·2019-08-30 15:54
閱讀 714·2019-08-30 15:54