亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP多進程之pcntl_fork的實例詳解

2024-05-05 00:00:30
字體:
來源:轉載
供稿:網友

PHP多進程編之pcntl_fork的實例詳解

其實PHP是支持并發的,只是平時很少使用而已。平時使用最多的應該是使用PHP-FMP調度php進程了吧。

但是,PHP的使用并不局限于做Web,我們完全也可以使用PHP來進行系統工具類的編程,做監控或者是運維。在使用這些方向的時候,我們可以使用到PHP的更多特性,例如并發(多進程)、socket編程等。

那么接下來就說說我遇到的PHP多進程的編程。這個多進程的使用是有一個背景的,下面模糊描述一下背景。

我需要一個監控系統,當然使用PHP語言,監控系統需要監控很多種系統指標,為了讓每個監控指標之間盡量專心的去做自己的事情,就需要單獨使用一個進程去監控一個指標,還有一個進程去讀取配置,拿到配置之后,根據配置去啟動每條進程。

那么,這就需要我所說的多進程了。

  1. 首先啟動一個主進程,主進程用來讀取配置信息。例如,我讀取到了我需要監控5個指標
  2. 接下來主進程啟動5個子進程,分別監控這5個指標。
  3. 創建好5個指標監控進程之后之后,主進程進行監聽配置。
  4. 一旦配置發生改變,殺死之前的進程并重新創建進程。

相對來說比較清晰的邏輯。那么接下來我們就化簡一下操作:簡單的說就是一個主進程創建5個子進程。

首先,創建進程在需要使用php的一個函數pcntl_fork(),這個函數可能有的同學不太熟,不過接觸過Linux C變成的人都知道Linux下有個叫fork()的函數,用來創建子進程。這個函數和Linux下這個函數是一個意思。需要注意的是,這個函數在Linux下才能使用,而且需要安裝pcntl的擴展。

對于這個函數怎么使用,我們可以查閱官方文檔:http://php.net/manual/zh/function.pcntl-fork.php

官方文檔是這樣說的:

pcntl_fork()函數創建一個子進程,這個子進程僅PID(進程號) 和PPID(父進程號)與其父進程不同。fork怎樣在您的系統工作的詳細信息請查閱您的系統 的fork(2)手冊。

成功時,在父進程執行線程內返回產生的子進程的PID,在子進程執行線程內返回0。失敗時,在 父進程上下文返回-1,不會創建子進程,并且會引發一個PHP錯誤。

這樣就可以創建一個子進程了,子進程創建成功以后會執行pcntl_fork()之后的方法。那么對于這個函數的返回值我們如何理解呢?

是這樣的,我們調用函數創建進程的時候,函數執行時有時間的,而新的進程剛好是在函數執行開始和結束之間創建出來的,這樣,新的進程也執行了這個函數,所以函數也需要有返回值。那么對于該函數一次執行之后,父進程和子進程都會受到該函數的返回值,由于父進程創建了子進程,而子進程并沒有創建新的進程,所以子進程對于這個函數的返回結果是沒有的,所以就給他賦了一個0。而父進程創建了子進程,子進程是存在pid的,所以就得到了那個進程的pid。

我們可以寫個程序了解一下:

$pid = pcntl_fork();var_dump($pid);

這個調用會輸出兩個值,但是我們如果直接print的只能看到一個值,也就是子進程的pid,但是使用var_dump我們就可以看到兩個值,是0和子進程的pid。0這個值就是子進程返回過來的。

那么如何創建進程了解清楚之后,就可以開始創建進程了,我們需要創建5個進程,那么我就循環5次創建進程。得到如下代碼:

 $i=0; while($i!=5){  $pid = pcntl_fork();  echo $pid."---------hahah".$i++.PHP_EOL; }

這樣就寫好了,那么運行一下吧。?。堪l現不是5個進程啊,發現有好多個進程,而且最后一個hahah4這個輸出有32個,為什么是32呢?我們算一算。2^5=32,為什么最后的線程數以指數增長了呢?

想發現這個并不難,因為我們之后的每一條都執行了while循環,到最后成了進程的指數增長——也就是說fork的時候把while循環也帶了進去。但是我們只是要5個進程而已。怎么辦呢?

通過之前對函數的研究可以看到,子進程中會返回一個為0的值,那么我們就可以知道,0為子進程的標記。我們可以通過對子進程標記來結束進程執行。所以我們可以將我們的代碼修改為如下形式:

$i=0;while($i!=5){ $pid = pcntl_fork(); echo $pid."---------hahah".$i++.PHP_EOL; if ($pid == 0) {  echo "子進程".PHP_EOL;  return; }}

因為0其實是對子進程的標記,那么pid這個變量在子進程里實際上是0的,所以當發現pid的值為0的時候,我們就可以斷定我們當前進程為一個子進程,不需要在讓他執行while并創建子進程的子進程了,所以在執行完我們的內容之后就return或者exit退出這個執行就好了。這樣就能保證我們執行創建了5個進程而不是32個了。

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲网址你懂得| 亚洲国产精久久久久久| 欧美洲成人男女午夜视频| 欧美黑人一级爽快片淫片高清| 久久精品视频亚洲| 国产午夜精品一区理论片飘花| 日本国产高清不卡| 疯狂做受xxxx高潮欧美日本| 日韩中文字幕免费视频| 亚洲一区二区久久久久久久| 日韩中文字幕久久| 日韩av大片免费看| 亚洲天堂影视av| 欧美激情视频免费观看| 91av在线国产| 97视频在线免费观看| 亚洲成人三级在线| 精品视频9999| 国产亚洲欧洲高清| 日韩精品久久久久久福利| 欧美国产一区二区三区| 国产精国产精品| 国内精品400部情侣激情| 久久久久免费视频| 亚洲最大福利视频网站| 亚洲欧洲在线免费| www.久久撸.com| 日韩视频在线一区| 成人欧美一区二区三区在线湿哒哒| 精品一区二区三区三区| 日韩一区二区三区在线播放| 成人av在线网址| 亚洲精品福利免费在线观看| 亚洲精品www久久久久久广东| 91精品久久久久久久久久| 亚洲国产高潮在线观看| 久久久av一区| 国产成人亚洲综合| 57pao成人永久免费视频| 国产va免费精品高清在线| 精品国产乱码久久久久酒店| 国产精品视频xxx| 7777精品视频| 国产精品黄页免费高清在线观看| 国产乱人伦真实精品视频| 日本精品一区二区三区在线播放视频| 精品美女永久免费视频| 久久夜色精品国产欧美乱| 97av视频在线| 精品久久久久久国产| 欧美日韩成人在线视频| 国产精品一区二区三区免费视频| 久久夜色撩人精品| 7m精品福利视频导航| 成人免费视频97| 国产精品久久一区主播| 国内精品在线一区| 美女久久久久久久| 另类色图亚洲色图| 欧美日本啪啪无遮挡网站| 精品精品国产国产自在线| 欧美激情日韩图片| 欧美激情综合亚洲一二区| 欧美日韩中文字幕| 在线观看日韩www视频免费| 亚洲欧美成人在线| 色综合导航网站| 91大神福利视频在线| 亚洲第一精品夜夜躁人人爽| 国产日韩欧美自拍| 欧美日韩中文字幕日韩欧美| 亚洲国产美女精品久久久久∴| 亚洲国产精品99| 亚洲欧美一区二区激情| 午夜精品一区二区三区在线播放| 国产一区av在线| 国产午夜精品理论片a级探花| 日韩精品视频免费专区在线播放| 国产精品亚洲аv天堂网| 国产不卡一区二区在线播放| 亚洲欧美日韩直播| 国产成人鲁鲁免费视频a| 成人黄色片在线| 欧美激情精品久久久久久蜜臀| 国产综合视频在线观看| 色综久久综合桃花网| 国产精品白丝jk喷水视频一区| 久久久精品一区二区三区| 国产精品国产三级国产aⅴ浪潮| www.99久久热国产日韩欧美.com| 亚洲精品国产精品国自产在线| 精品免费在线观看| 日本精品一区二区三区在线| 欧美激情va永久在线播放| 国产主播欧美精品| 韩剧1988在线观看免费完整版| 国产在线98福利播放视频| 亚洲欧美日韩中文在线| 亚洲国产成人精品电影| 国产精品av免费在线观看| 欧美日韩国产丝袜另类| 国产精品精品一区二区三区午夜版| 欧美精品www| 日韩中文视频免费在线观看| 伊人久久综合97精品| 国产69精品久久久久9| 26uuu国产精品视频| 国产成人综合久久| 成人免费淫片视频软件| 97碰碰碰免费色视频| 久操成人在线视频| 一区二区欧美亚洲| 亚洲欧美日韩中文在线制服| 色综合久综合久久综合久鬼88| 欧美性极品少妇精品网站| 亚洲视屏在线播放| 亚洲精品久久久久| 亚洲3p在线观看| 色先锋久久影院av| 国产精品a久久久久久| 欧美精品www| 国产精品久久久91| 欧美激情aaaa| 久久久免费精品视频| 亚洲欧美国产高清va在线播| 久久亚洲精品视频| 久久久精品久久| 亚洲国产精品人久久电影| 国产精品高清在线观看| 国产成人久久精品| 日本免费久久高清视频| 亚州精品天堂中文字幕| 国产成人精品久久久| 久久国产精品偷| 精品国产福利在线| 色樱桃影院亚洲精品影院| 欧美一区二区大胆人体摄影专业网站| 日韩毛片中文字幕| 亚洲免费小视频| 亚洲japanese制服美女| 亚洲欧美国产日韩天堂区| 久久久久久成人| 国产精品女人久久久久久| 欧美大肥婆大肥bbbbb| 日本精品久久久久久久| 亚洲缚视频在线观看| 韩国精品久久久999| 精品久久久久人成| 色噜噜久久综合伊人一本| 亚洲午夜精品久久久久久性色| 欧美激情中文字幕在线| 欧美极品少妇全裸体| 亚洲高清av在线| 国产精品一区二区久久| 亚洲成人免费在线视频| 亚洲国产成人精品女人久久久| 亚洲国产精品va在线看黑人动漫| 色偷偷av亚洲男人的天堂| 国产九九精品视频| 亚洲综合一区二区不卡| 最新国产精品拍自在线播放| 欧美日韩色婷婷| 欧美激情a在线| 96pao国产成视频永久免费|