成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP多進程編程

lieeps / 629人閱讀

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

使用多進程的優(yōu)點:

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

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

我們需要安裝pcnt擴展

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

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

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

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

輸出結(jié)果:

子進程回收

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

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


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


如果父進程先掛了怎么辦?

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

最后需要注意的:

進程控制不能被應(yīng)用在Web服務(wù)器環(huán)境,當其被用于Web服務(wù)環(huán)境時可能會帶來意外的結(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://systransis.cn/yun/22643.html

相關(guān)文章

  • PHP回顧之進程編程

    摘要:多進程中與多進程相關(guān)的兩個重要拓展是和。函數(shù)執(zhí)行期間,主進程除了等待無法處理其他任務(wù),所以一般不認為這是多進程編程。回收子進程有兩種方式,一種是主進程調(diào)用函數(shù)等待子進程結(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編程之路

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

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

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

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

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

    Andrman 評論0 收藏0

發(fā)表評論

0條評論

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