php的進程控制支持實現了unix方式的進程創建, 程序執行, 信號處理以及進程的中斷。 進程控制不能被應用在Web服務器環境,當其被用于Web服務環境時可能會帶來意外的結果。? ? ? ? ? ? ? ? ? ? ? (推薦學習: swoole視頻教程)
PCNTL現在使用了ticks作為信號處理的回調機制,ticks在速度上遠遠超過了之前的處理機制。 這個變化與“用戶ticks”遵循了相同的語義。
您可以使用declare() 語句在程序中指定允許發生回調的位置。這使得我們對異步事件處理的開銷最小化。在編譯PHP時 啟用pcntl將始終承擔這種開銷,不論您的腳本中是否真正使用了pcntl。
有一個調整是PHP 4.3.0之前的所有pcntl腳本要使其工作,要么在期望允許回調的(代碼)部分使用 declare() ,要么使用declare()新的全局語法 使其在整個腳本范圍有效。
Note: 此擴展在 windows 平臺上不可用。
swoole增加了多進程管理模塊來替代PHP的pcntl,它相比pcntl的不同點是:
swoole_process提供了pcntl沒有的進程間通信swoole_process支持重定向標準輸入和輸出,在子進程內echo或者讀鍵盤輸入可以被重定向為從管道中取數據子進程可以異步化
進程間通信(IPC)
子進程和父進程之間可以通過管道通信,傳遞數據。IPC在多進程編程中經常用到,PHP的pcntl模塊沒有提供IPC的功能,所以功能有局限。而swoole_process提供了這些功能,并且封裝了接口。只需調用接口即可完成進程間通信。
$worker_num?=?8; for($i?=?0;?$i?start(); ????$workers[$pid]?=?$process; } function?callback_function(swoole_process?$worker) { ????//echo?"Worker:?start.?PID=".$worker->pid."n"; ????//recv?data?from?master ????$recv?=?$worker->read(); ????echo?"From?Master:?$recvn"; ????//send?data?to?master ????$worker->write("hello?mastern"); ????sleep(2); ????$worker->exit(0); }
read/write 2個方法就是向管道內讀寫數據。主進程內可以通過write/read 向子進程寫入,讀取數據。