swoole到底可以多線程么

swoole到底可以多線程么

swoole線程其實(shí)就是多進(jìn)程,進(jìn)程創(chuàng)建太多切換的開銷很大,如果能用上pthreads建議用pthreads。

swoole實(shí)例如下: ? ? ? (推薦學(xué)習(xí): swoole視頻教程

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

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享