PHP的進(jìn)程控制支持實(shí)現(xiàn)了Unix方式的進(jìn)程創(chuàng)建, 程序執(zhí)行, 信號(hào)處理以及進(jìn)程的中斷。 進(jìn)程控制不能被應(yīng)用在Web服務(wù)器環(huán)境,當(dāng)其被用于Web服務(wù)環(huán)境時(shí)可能會(huì)帶來意外的結(jié)果。 (推薦學(xué)習(xí): swoole視頻教程)
PCNTL現(xiàn)在使用了ticks作為信號(hào)處理的回調(diào)機(jī)制,ticks在速度上遠(yuǎn)遠(yuǎn)超過了之前的處理機(jī)制。 這個(gè)變化與“用戶ticks”遵循了相同的語義。
您可以使用declare() 語句在程序中指定允許發(fā)生回調(diào)的位置。這使得我們對(duì)異步事件處理的開銷最小化。在編譯PHP時(shí) 啟用pcntl將始終承擔(dān)這種開銷,不論您的腳本中是否真正使用了pcntl。
有一個(gè)調(diào)整是PHP 4.3.0之前的所有pcntl腳本要使其工作,要么在期望允許回調(diào)的(代碼)部分使用 declare() ,要么使用declare()新的全局語法 使其在整個(gè)腳本范圍有效。
Note: 此擴(kuò)展在 Windows 平臺(tái)上不可用。
swoole增加了多進(jìn)程管理模塊來替代PHP的pcntl,它相比pcntl的不同點(diǎn)是:
swoole_process提供了pcntl沒有的進(jìn)程間通信swoole_process支持重定向標(biāo)準(zhǔn)輸入和輸出,在子進(jìn)程內(nèi)echo或者讀鍵盤輸入可以被重定向?yàn)閺墓艿乐腥?shù)據(jù)子進(jìn)程可以異步化
進(jìn)程間通信(IPC)
子進(jìn)程和父進(jìn)程之間可以通過管道通信,傳遞數(shù)據(jù)。IPC在多進(jìn)程編程中經(jīng)常用到,PHP的pcntl模塊沒有提供IPC的功能,所以功能有局限。而swoole_process提供了這些功能,并且封裝了接口。只需調(diào)用接口即可完成進(jìn)程間通信。
$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: $recvn"; //send data to master $worker->write("hello mastern"); sleep(2); $worker->exit(0); }
read/write 2個(gè)方法就是向管道內(nèi)讀寫數(shù)據(jù)。主進(jìn)程內(nèi)可以通過write/read 向子進(jìn)程寫入,讀取數(shù)據(jù)。