摘要:在程序中經(jīng)常需要用執(zhí)行一些命令,而普通的是阻塞的,如果命令執(zhí)行時(shí)間過(guò)長(zhǎng),那可能會(huì)導(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í)間過(guò)長(zhǎng),那可能會(huì)導(dǎo)致進(jìn)程完全卡住。
在Swoole4協(xié)程環(huán)境下可以用Co::exec并發(fā)地執(zhí)行很多命令。
本文基于Swoole-4.2.9和PHP-7.2.9版本協(xié)程示例
返回值Co::exec執(zhí)行完成后會(huì)恢復(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 來(lái)試試。
阻塞代碼使用nohup或&轉(zhuǎn)為后臺(tái)執(zhí)行,無(wú)法得到命令執(zhí)行的結(jié)果和輸出,本文不對(duì)此進(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29710.html
摘要:為語(yǔ)言提供了強(qiáng)大的協(xié)程編程模式。提供的協(xié)程語(yǔ)法借鑒自,在此向開(kāi)發(fā)組致敬協(xié)程可以與很好地互補(bǔ)。并發(fā)執(zhí)行使用創(chuàng)建協(xié)程,可以讓和兩個(gè)函數(shù)變成并發(fā)執(zhí)行。協(xié)程需要拿到請(qǐng)求的結(jié)果。 Swoole4為PHP語(yǔ)言提供了強(qiáng)大的CSP協(xié)程編程模式。底層提供了3個(gè)關(guān)鍵詞,可以方便地實(shí)現(xiàn)各類功能。 Swoole4提供的PHP協(xié)程語(yǔ)法借鑒自Golang,在此向GO開(kāi)發(fā)組致敬 PHP+Swoole協(xié)程可以與...
摘要:如果僅依靠程序自動(dòng)交出控制的話,那么一些惡意程序?qū)?huì)很容易占用全部時(shí)間而不與其他任務(wù)共享。多個(gè)操作可以在重疊的時(shí)間段內(nèi)進(jìn)行。 PHP下的異步嘗試系列 如果你還不太了解PHP下的生成器,你可以根據(jù)下面目錄翻閱 PHP下的異步嘗試一:初識(shí)生成器 PHP下的異步嘗試二:初識(shí)協(xié)程 PHP下的異步嘗試三:協(xié)程的PHP版thunkify自動(dòng)執(zhí)行器 PHP下的異步嘗試四:PHP版的Promise ...
摘要:現(xiàn)在在后端業(yè)務(wù)開(kāi)發(fā)編程方面,技術(shù)力量強(qiáng)的團(tuán)隊(duì)已經(jīng)開(kāi)始將技術(shù)棧從同步模式切換為異步了。使用這些技術(shù)方案是無(wú)法兼容已有程序的。影響了異步回調(diào)技術(shù)棧的普及。將會(huì)成為未來(lái)后端開(kāi)發(fā)領(lǐng)域的主流技術(shù)方案。 今天太忙,少寫(xiě)一點(diǎn),后面再補(bǔ)充。 異步模式 Go 語(yǔ)言越來(lái)越熱門(mén),很多大型互聯(lián)網(wǎng)公司后端正在轉(zhuǎn)向 GO 。Java 圈知名的服務(wù)化框架 Dubbo 也宣布轉(zhuǎn)型異步模式。這是一個(gè)大趨勢(shì),異步模式已經(jīng)...
摘要:然而盡管如此,很多人可能都沒(méi)有思考過(guò),如何優(yōu)雅的寫(xiě)出自己的物聯(lián)網(wǎng)服務(wù)器。 PHP不適合做物聯(lián)網(wǎng)服務(wù)端嗎? 在傳統(tǒng)的思維中,經(jīng)常會(huì)有人告訴你,php不適合用來(lái)做物聯(lián)網(wǎng)服務(wù)端,讓你換java,node,go等其他語(yǔ)言,是的,沒(méi)錯(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ě)出原理大約...
摘要:官方文檔中對(duì)協(xié)程的示例大多按照一次請(qǐng)求一個(gè)協(xié)程或腳本并發(fā)大量協(xié)程的方式來(lái)舉例說(shuō)明這種使用方式下提升的是整體的性能而非單次請(qǐng)求的響應(yīng)時(shí)間要提升單次請(qǐng)求的響應(yīng)效率或提升非網(wǎng)絡(luò)服務(wù)下腳本代碼的運(yùn)行效率需要在業(yè)務(wù)代碼中主動(dòng)使用協(xié)程來(lái)處理那些可并發(fā)的 Swoole官方文檔中對(duì)協(xié)程的示例大多按照一次請(qǐng)求一個(gè)協(xié)程(或腳本并發(fā)大量協(xié)程)的方式來(lái)舉例說(shuō)明,這種使用方式下提升的是整體的性能,而非單次請(qǐng)求的...
閱讀 2928·2021-10-14 09:42
閱讀 3694·2021-08-11 11:19
閱讀 3542·2019-08-30 13:57
閱讀 3120·2019-08-30 13:49
閱讀 1534·2019-08-29 18:38
閱讀 898·2019-08-29 13:16
閱讀 1850·2019-08-26 13:25
閱讀 3230·2019-08-26 13:24