這篇文章主要介紹“swoole是不是多線程”,在日常操作中,相信很多人在swoole是不是多線程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”swoole是不是多線程”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有西青免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
swoole不是多線程的。因為PHP語言不支持多進(jìn)程,所以swoole使用多進(jìn)程模式,在多進(jìn)程模式下存在進(jìn)程內(nèi)容隔離,在工作進(jìn)程內(nèi)修改global全局變量和超全局變量時,在其它進(jìn)程是無效的。
本教程操作環(huán)境:Windows10系統(tǒng)、Swoole4版、DELL G3電腦
由于PHP語言不支持多線程,因此Swoole使用多進(jìn)程模式。在多進(jìn)程模式下存在進(jìn)程內(nèi)存隔離,在工作進(jìn)程內(nèi)修改global全局變量和超全局變量時,在其他進(jìn)程是無效的。
swoole的多線程其實就是多進(jìn)程,進(jìn)程創(chuàng)建太多切換的開銷很大,如果能用上pthreads建議用pthreads。
swoole實例如下:
useQueue(0, 2); $pid = $process->start(); // 管道寫入內(nèi)容 $process->write('index:'.$i); $process->push('進(jìn)程的消息隊列內(nèi)容'); // 將每一個進(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->pop(); echo "子輸出主內(nèi)容: {$recv}".PHP_EOL; //get guandao content $recv = $worker->read(); $result = doTask(); echo PHP_EOL.$result.'==='.$worker->pid.'==='.$recv; $worker->exit(0); } /** * 監(jiān)控/回收子進(jìn)程 */ while(1){ $ret = swoole_process::wait(); if ($ret){// $ret 是個數(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; }
到此,關(guān)于“swoole是不是多線程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享名稱:swoole是不是多線程
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jssjse.html