摘要:在程序中經(jīng)常需要用執(zhí)行一些命令,而普通的是阻塞的,如果命令執(zhí)行時(shí)間過長,那可能會導(dǎo)致進(jìn)程完全卡住。在協(xié)程環(huán)境下可以用并發(fā)地執(zhí)行很多命令。提供的協(xié)程,是并發(fā)編程的利器。在工作中很多地方都可以使用協(xié)程,實(shí)現(xiàn)并發(fā)程序,大大提升程序性能。
在PHP程序中經(jīng)常需要用shell_exec執(zhí)行一些命令,而普通的shell_exec是阻塞的,如果命令執(zhí)行時(shí)間過長,那可能會導(dǎo)致進(jìn)程完全卡住。
在Swoole4協(xié)程環(huán)境下可以用Co::exec并發(fā)地執(zhí)行很多命令。
本文基于Swoole-4.2.9和PHP-7.2.9版本協(xié)程示例
返回值Co::exec執(zhí)行完成后會恢復(fù)掛起的協(xié)程,并返回命令的輸出和退出的狀態(tài)碼。
var_dump(co::exec("sleep 5"));協(xié)程結(jié)果htf@htf-ThinkPad-T470p:~/workspace/debug$ time php t.php real 0m5.089s user 0m0.067s sys 0m0.038s htf@htf-ThinkPad-T470p:~/workspace/debug$只用了 5秒,程序就跑完了。
下面換成 PHP 的 shell_exec 來試試。
阻塞代碼使用nohup或&轉(zhuǎn)為后臺執(zhí)行,無法得到命令執(zhí)行的結(jié)果和輸出,本文不對此進(jìn)行深度探討阻塞結(jié)果htf@htf-ThinkPad-T470p:~/workspace/debug$ time php s.php real 0m50.119s user 0m0.066s sys 0m0.058s htf@htf-ThinkPad-T470p:~/workspace/debug$可以看到阻塞版本花費(fèi)了50秒才完成。Swoole4提供的協(xié)程,是并發(fā)編程的利器。在工作中很多地方都可以使用協(xié)程,實(shí)現(xiàn)并發(fā)程序,大大提升程序性能。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/29710.html
摘要:為語言提供了強(qiáng)大的協(xié)程編程模式。提供的協(xié)程語法借鑒自,在此向開發(fā)組致敬協(xié)程可以與很好地互補(bǔ)。并發(fā)執(zhí)行使用創(chuàng)建協(xié)程,可以讓和兩個(gè)函數(shù)變成并發(fā)執(zhí)行。協(xié)程需要拿到請求的結(jié)果。 Swoole4為PHP語言提供了強(qiáng)大的CSP協(xié)程編程模式。底層提供了3個(gè)關(guān)鍵詞,可以方便地實(shí)現(xiàn)各類功能。 Swoole4提供的PHP協(xié)程語法借鑒自Golang,在此向GO開發(fā)組致敬 PHP+Swoole協(xié)程可以與...
摘要:如果僅依靠程序自動交出控制的話,那么一些惡意程序?qū)苋菀渍加萌繒r(shí)間而不與其他任務(wù)共享。多個(gè)操作可以在重疊的時(shí)間段內(nèi)進(jìn)行。 PHP下的異步嘗試系列 如果你還不太了解PHP下的生成器,你可以根據(jù)下面目錄翻閱 PHP下的異步嘗試一:初識生成器 PHP下的異步嘗試二:初識協(xié)程 PHP下的異步嘗試三:協(xié)程的PHP版thunkify自動執(zhí)行器 PHP下的異步嘗試四:PHP版的Promise ...
摘要:現(xiàn)在在后端業(yè)務(wù)開發(fā)編程方面,技術(shù)力量強(qiáng)的團(tuán)隊(duì)已經(jīng)開始將技術(shù)棧從同步模式切換為異步了。使用這些技術(shù)方案是無法兼容已有程序的。影響了異步回調(diào)技術(shù)棧的普及。將會成為未來后端開發(fā)領(lǐng)域的主流技術(shù)方案。 今天太忙,少寫一點(diǎn),后面再補(bǔ)充。 異步模式 Go 語言越來越熱門,很多大型互聯(lián)網(wǎng)公司后端正在轉(zhuǎn)向 GO 。Java 圈知名的服務(wù)化框架 Dubbo 也宣布轉(zhuǎn)型異步模式。這是一個(gè)大趨勢,異步模式已經(jīng)...
摘要:然而盡管如此,很多人可能都沒有思考過,如何優(yōu)雅的寫出自己的物聯(lián)網(wǎng)服務(wù)器。 PHP不適合做物聯(lián)網(wǎng)服務(wù)端嗎? 在傳統(tǒng)的思維中,經(jīng)常會有人告訴你,php不適合用來做物聯(lián)網(wǎng)服務(wù)端,讓你換java,node,go等其他語言,是的,沒錯(cuò)傳統(tǒng)意義上的php,確實(shí)很難做物聯(lián)網(wǎng)服務(wù)器,因?yàn)樗鼘?shí)在太蹩腳了,當(dāng)然,這也不是意味著徹底就不能做。舉個(gè)例子,當(dāng)你想實(shí)現(xiàn)一個(gè)TCP服務(wù)器的時(shí)候,你可能需要寫出原理大約...
摘要:官方文檔中對協(xié)程的示例大多按照一次請求一個(gè)協(xié)程或腳本并發(fā)大量協(xié)程的方式來舉例說明這種使用方式下提升的是整體的性能而非單次請求的響應(yīng)時(shí)間要提升單次請求的響應(yīng)效率或提升非網(wǎng)絡(luò)服務(wù)下腳本代碼的運(yùn)行效率需要在業(yè)務(wù)代碼中主動使用協(xié)程來處理那些可并發(fā)的 Swoole官方文檔中對協(xié)程的示例大多按照一次請求一個(gè)協(xié)程(或腳本并發(fā)大量協(xié)程)的方式來舉例說明,這種使用方式下提升的是整體的性能,而非單次請求的...
閱讀 3026·2021-10-14 09:42
閱讀 3811·2021-08-11 11:19
閱讀 3616·2019-08-30 13:57
閱讀 3215·2019-08-30 13:49
閱讀 1612·2019-08-29 18:38
閱讀 963·2019-08-29 13:16
閱讀 1912·2019-08-26 13:25
閱讀 3296·2019-08-26 13:24