摘要:輸出結果子進程回收阻塞方式剛剛有么一般我習慣用加上命令來查找運行著的后臺進程。還有一種方法,既可以回收已經結束的子進程,又可以并行。但是這個時候,子進程會被交給號進程,號進程成為了這些子進程的繼父。
使用多進程的優點:
1. 使用多進程, 子進程結束以后, 內核會負責回收資源 2. 使用多進程,子進程異常退出不會導致整個進程Thread退出. 父進程還有機會重建流程. 3. 一個常駐主進程, 只負責任務分發, 邏輯更清楚.
PHP中實現多進程,Let"s Go.
我們需要安裝pcnt擴展
pcntl是process control的縮寫,通常,php會默認安裝這個擴展。使用phpinfo()函數查看擴展是否存在。
使用pcntl_fork() 函數創建子進程
pcntl_fork作用就是創建和當前進程一樣的子進程,這個子進程代碼段和當前進程一模一樣,但是擁有自己的數據段。看一個最簡單的創建子進程的方法:
pcntl_fork()調用成功以后,一個程序變成了兩個程序:一個程序得到的$pid變量值是0,它是子進程;另一個程序得到的$pid的值大于0,這個值是子進程的PID,它是父進程。
輸出結果:
子進程回收
① 阻塞方式
剛剛有ps么?一般我習慣用ps aux加上grep命令來查找運行著的后臺進程。其中有一列STAT,標識了每個進程的運行狀態。這里,我們關注狀態Z:僵尸(Zombie)。當子進程比父進程先退出,而父進程沒對其做任何處理的時候,子進程將會變成僵尸進程。僵尸進程雖然不占什么內存,但是很礙眼。(別忘了它們還占用著PID)
一般來說,在父進程結束之前回收掛掉的子進程就可以了。在pcntl擴展里面有一個pcntl_wait()函數,通過這個方法等待進程結束,然后回收已經結束的進程。
② 非阻塞方式
阻塞方式失去了多進程的并行性。還有一種方法,既可以回收已經結束的子進程,又可以并行。這就是非阻塞的方式。如果父進程先掛了怎么辦?
會發生什么?什么也不會發生,子進程依舊還在運行。但是這個時候,子進程會被交給1號進程,1號進程成為了這些子進程的繼父。1號進程會很好地處理這些進程的資源,當它們結束時1號進程會自動回收資源。所以,另一種處理僵尸進程的臨時辦法是關閉它們的父進程。
最后需要注意的:
進程控制不能被應用在Web服務器環境,當其被用于Web服務環境時可能會帶來意外的結果。 -- 摘自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/關注我的公眾號,一起成長
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22643.html
摘要:多進程中與多進程相關的兩個重要拓展是和。函數執行期間,主進程除了等待無法處理其他任務,所以一般不認為這是多進程編程。回收子進程有兩種方式,一種是主進程調用函數等待子進程結束另外一種是處理信號。 轉載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎 web請求 cookie web響應 session 數據庫操作 加解...
摘要:下文如無特殊聲明將使用進程同時表示進程線程。收到數據后服務器程序進行處理然后使用向客戶端發送響應。現在各種高并發異步的服務器程序都是基于實現的,比如。 并發 IO 問題一直是服務器端編程中的技術難題,從最早的同步阻塞直接 Fork 進程,到 Worker 進程池/線程池,到現在的異步IO、協程。PHP 程序員因為有強大的 LAMP 框架,對這類底層方面的知識知之甚少,本文目的就是詳細介...
摘要:本文使用與完成一個的進程池,并且支持動態創建新進程。接著遍歷所有的進程,并且加入中,設置可讀事件,用于接收子進程的空閑信號。最后每隔一秒向進程投遞任務。由于只模擬了十次任務,則第十個任務完成之后在父進程中發送使所有子進程退出。 swoole_process 主要是用來代替 PHP 的 pcntl 擴展。我們知道 pcntl 是用來進行多進程編程的,而 pcntl 只提供了 fork 這...
閱讀 1076·2021-10-14 09:42
閱讀 1369·2021-09-22 15:11
閱讀 3285·2019-08-30 15:56
閱讀 1243·2019-08-30 15:55
閱讀 3612·2019-08-30 15:55
閱讀 889·2019-08-30 15:44
閱讀 2028·2019-08-29 17:17
閱讀 2072·2019-08-29 15:37