亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP多進(jìn)程編程

lieeps / 660人閱讀

摘要:輸出結(jié)果子進(jìn)程回收阻塞方式剛剛有么一般我習(xí)慣用加上命令來查找運(yùn)行著的后臺進(jìn)程。還有一種方法,既可以回收已經(jīng)結(jié)束的子進(jìn)程,又可以并行。但是這個時(shí)候,子進(jìn)程會被交給號進(jìn)程,號進(jìn)程成為了這些子進(jìn)程的繼父。

使用多進(jìn)程的優(yōu)點(diǎn):

    1. 使用多進(jìn)程, 子進(jìn)程結(jié)束以后, 內(nèi)核會負(fù)責(zé)回收資源
    2. 使用多進(jìn)程,子進(jìn)程異常退出不會導(dǎo)致整個進(jìn)程Thread退出. 父進(jìn)程還有機(jī)會重建流程.
    3. 一個常駐主進(jìn)程, 只負(fù)責(zé)任務(wù)分發(fā), 邏輯更清楚.

PHP中實(shí)現(xiàn)多進(jìn)程,Let"s Go.

我們需要安裝pcnt擴(kuò)展

pcntl是process control的縮寫,通常,php會默認(rèn)安裝這個擴(kuò)展。使用phpinfo()函數(shù)查看擴(kuò)展是否存在。

使用pcntl_fork() 函數(shù)創(chuàng)建子進(jìn)程

pcntl_fork作用就是創(chuàng)建和當(dāng)前進(jìn)程一樣的子進(jìn)程,這個子進(jìn)程代碼段和當(dāng)前進(jìn)程一模一樣,但是擁有自己的數(shù)據(jù)段??匆粋€最簡單的創(chuàng)建子進(jìn)程的方法:

pcntl_fork()調(diào)用成功以后,一個程序變成了兩個程序:一個程序得到的$pid變量值是0,它是子進(jìn)程;另一個程序得到的$pid的值大于0,這個值是子進(jìn)程的PID,它是父進(jìn)程。

輸出結(jié)果:

子進(jìn)程回收

① 阻塞方式
剛剛有ps么?一般我習(xí)慣用ps aux加上grep命令來查找運(yùn)行著的后臺進(jìn)程。其中有一列STAT,標(biāo)識了每個進(jìn)程的運(yùn)行狀態(tài)。這里,我們關(guān)注狀態(tài)Z:僵尸(Zombie)。當(dāng)子進(jìn)程比父進(jìn)程先退出,而父進(jìn)程沒對其做任何處理的時(shí)候,子進(jìn)程將會變成僵尸進(jìn)程。僵尸進(jìn)程雖然不占什么內(nèi)存,但是很礙眼。(別忘了它們還占用著PID)

一般來說,在父進(jìn)程結(jié)束之前回收掛掉的子進(jìn)程就可以了。在pcntl擴(kuò)展里面有一個pcntl_wait()函數(shù),通過這個方法等待進(jìn)程結(jié)束,然后回收已經(jīng)結(jié)束的進(jìn)程。


② 非阻塞方式
阻塞方式失去了多進(jìn)程的并行性。還有一種方法,既可以回收已經(jīng)結(jié)束的子進(jìn)程,又可以并行。這就是非阻塞的方式。


如果父進(jìn)程先掛了怎么辦?

會發(fā)生什么?什么也不會發(fā)生,子進(jìn)程依舊還在運(yùn)行。但是這個時(shí)候,子進(jìn)程會被交給1號進(jìn)程,1號進(jìn)程成為了這些子進(jìn)程的繼父。1號進(jìn)程會很好地處理這些進(jìn)程的資源,當(dāng)它們結(jié)束時(shí)1號進(jìn)程會自動回收資源。所以,另一種處理僵尸進(jìn)程的臨時(shí)辦法是關(guān)閉它們的父進(jìn)程。

最后需要注意的:

進(jìn)程控制不能被應(yīng)用在Web服務(wù)器環(huán)境,當(dāng)其被用于Web服務(wù)環(huán)境時(shí)可能會帶來意外的結(jié)果。 -- 摘自PHP手冊

參考:

http://www.hackingwithphp.com/16/1/3/getting-into-multiprocessing

http://www.jb51.net/article/71232.htm

http://www.laruence.com/2009/06/11/930.html

http://imhuchao.com/596.html

https://www.pureweber.com/article/php-multi-process-programming-preview/

關(guān)注我的公眾號,一起成長

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/22643.html

相關(guān)文章

  • PHP回顧之進(jìn)程編程

    摘要:多進(jìn)程中與多進(jìn)程相關(guān)的兩個重要拓展是和。函數(shù)執(zhí)行期間,主進(jìn)程除了等待無法處理其他任務(wù),所以一般不認(rèn)為這是多進(jìn)程編程?;厥兆舆M(jìn)程有兩種方式,一種是主進(jìn)程調(diào)用函數(shù)等待子進(jìn)程結(jié)束另外一種是處理信號。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) session 數(shù)據(jù)庫操作 加解...

    lifesimple 評論0 收藏0
  • PHP并發(fā)IO編程之路

    摘要:下文如無特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)?,F(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對這類底層方面的知識知之甚少,本文目的就是詳細(xì)介...

    Riddler 評論0 收藏0
  • PHP回顧之協(xié)程

    摘要:本文先回顧生成器,然后過渡到協(xié)程編程。其作用主要體現(xiàn)在三個方面數(shù)據(jù)生成生產(chǎn)者,通過返回?cái)?shù)據(jù)數(shù)據(jù)消費(fèi)消費(fèi)者,消費(fèi)傳來的數(shù)據(jù)實(shí)現(xiàn)協(xié)程。解決回調(diào)地獄的方式主要有兩種和協(xié)程。重點(diǎn)應(yīng)當(dāng)關(guān)注控制權(quán)轉(zhuǎn)讓的時(shí)機(jī),以及協(xié)程的運(yùn)作方式。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) sess...

    Java3y 評論0 收藏0
  • 使用 swoole_process 實(shí)現(xiàn) PHP 進(jìn)程

    摘要:本文使用與完成一個的進(jìn)程池,并且支持動態(tài)創(chuàng)建新進(jìn)程。接著遍歷所有的進(jìn)程,并且加入中,設(shè)置可讀事件,用于接收子進(jìn)程的空閑信號。最后每隔一秒向進(jìn)程投遞任務(wù)。由于只模擬了十次任務(wù),則第十個任務(wù)完成之后在父進(jìn)程中發(fā)送使所有子進(jìn)程退出。 swoole_process 主要是用來代替 PHP 的 pcntl 擴(kuò)展。我們知道 pcntl 是用來進(jìn)行多進(jìn)程編程的,而 pcntl 只提供了 fork 這...

    Andrman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<