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 < $worker_num; $i++) { $process = new swoole_process('callback_function', $redirect_stdout); $pid = $process->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: $recv\n"; //send data to master $worker->write("hello master\n"); sleep(2); $worker->exit(0); }
read/write 2個方法就是向管道內讀寫資料。主進程內可以透過write/read 向子進程寫入,讀取資料。
以上是swoole和pcntl區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!