swoole是多線程嗎

swoole不是線程的。因為php語言不支持多進程,所以swoole使用多進程模式,在多進程模式下存在進程內容隔離,在工作進程內修改global全局變量和超全局變量時,在其它進程是無效的。

swoole是多線程嗎

本教程操作環境:Windows10系統、Swoole4版、DELL G3電腦

swoole是多線程嗎

由于PHP語言不支持多線程,因此Swoole使用多進程模式。在多進程模式下存在進程內存隔離,在工作進程內修改global全局變量和超全局變量時,在其他進程是無效的。

swoole的多線程其實就是多進程,進程創建太多切換的開銷很大,如果能用上pthreads建議用pthreads。

swoole實例如下:? ? ??

<?php /**  * 創建多進程  */ $worker_num         = 6;        // 默認進程數 $workers             = [];        // 進程保存 $redirect_stdout    = false;    // 重定向輸出  ; 這個參數用途等會我們看效果 for($i = 0; $i < $worker_num; $i++){     $process = new swoole_process(&#39;callback_function&#39;, $redirect_stdout);       // 啟用消息隊列 int $msgkey = 0, int $mode = 2     $process->useQueue(0,?2); ????$pid?=?$process-&gt;start(); ? ????//?管道寫入內容 ????$process-&gt;write('index:'.$i); ? ????$process-&gt;push('進程的消息隊列內容'); ????//?將每一個進程的句柄存起來 ????$workers[$pid]?=?$process; } ? ? /** ?*?子進程回調 ?*?@param??swoole_process?$worker?[description] ?*?@return?[type]?????????????????[description] ?*/ function?callback_function(swoole_process?$worker) { ????$recv?=?$worker-&gt;pop(); ????echo?"子輸出主內容:?{$recv}".PHP_EOL; ????//get?guandao?content ????$recv?=?$worker-&gt;read(); ????$result?=?doTask(); ???? ????echo?PHP_EOL.$result.'==='.$worker-&gt;pid.'==='.$recv; ? ????$worker-&gt;exit(0); } ? ? /** ?*?監控/回收子進程 ?*/ while(1){ ????$ret?=?swoole_process::wait(); ????if?($ret){//?$ret?是個數組?code是進程退出狀態碼, ????????$pid?=?$ret['pid']; ????????echo?PHP_EOL."Worker?Exit,?PID="?.?$pid?.?PHP_EOL; ????}else{ ????????break; ????} } ? ? /** ?*?doTask ?*?@return?[type]?[description] ?*/ function?doTask() { ????sleep(2); ????return?true; }

推薦學習: swoole教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享