摘要:在程序中經常需要用執行一些命令,而普通的是阻塞的,如果命令執行時間過長,那可能會導致進程完全卡住。在協程環境下可以用并發地執行很多命令。提供的協程,是并發編程的利器。在工作中很多地方都可以使用協程,實現并發程序,大大提升程序性能。
在PHP程序中經常需要用shell_exec執行一些命令,而普通的shell_exec是阻塞的,如果命令執行時間過長,那可能會導致進程完全卡住。
在Swoole4協程環境下可以用Co::exec并發地執行很多命令。
本文基于Swoole-4.2.9和PHP-7.2.9版本協程示例
返回值Co::exec執行完成后會恢復掛起的協程,并返回命令的輸出和退出的狀態碼。
var_dump(co::exec("sleep 5"));協程結果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或&轉為后臺執行,無法得到命令執行的結果和輸出,本文不對此進行深度探討阻塞結果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$可以看到阻塞版本花費了50秒才完成。Swoole4提供的協程,是并發編程的利器。在工作中很多地方都可以使用協程,實現并發程序,大大提升程序性能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29710.html
摘要:為語言提供了強大的協程編程模式。提供的協程語法借鑒自,在此向開發組致敬協程可以與很好地互補。并發執行使用創建協程,可以讓和兩個函數變成并發執行。協程需要拿到請求的結果。 Swoole4為PHP語言提供了強大的CSP協程編程模式。底層提供了3個關鍵詞,可以方便地實現各類功能。 Swoole4提供的PHP協程語法借鑒自Golang,在此向GO開發組致敬 PHP+Swoole協程可以與...
摘要:如果僅依靠程序自動交出控制的話,那么一些惡意程序將會很容易占用全部時間而不與其他任務共享。多個操作可以在重疊的時間段內進行。 PHP下的異步嘗試系列 如果你還不太了解PHP下的生成器,你可以根據下面目錄翻閱 PHP下的異步嘗試一:初識生成器 PHP下的異步嘗試二:初識協程 PHP下的異步嘗試三:協程的PHP版thunkify自動執行器 PHP下的異步嘗試四:PHP版的Promise ...
摘要:現在在后端業務開發編程方面,技術力量強的團隊已經開始將技術棧從同步模式切換為異步了。使用這些技術方案是無法兼容已有程序的。影響了異步回調技術棧的普及。將會成為未來后端開發領域的主流技術方案。 今天太忙,少寫一點,后面再補充。 異步模式 Go 語言越來越熱門,很多大型互聯網公司后端正在轉向 GO 。Java 圈知名的服務化框架 Dubbo 也宣布轉型異步模式。這是一個大趨勢,異步模式已經...
摘要:然而盡管如此,很多人可能都沒有思考過,如何優雅的寫出自己的物聯網服務器。 PHP不適合做物聯網服務端嗎? 在傳統的思維中,經常會有人告訴你,php不適合用來做物聯網服務端,讓你換java,node,go等其他語言,是的,沒錯傳統意義上的php,確實很難做物聯網服務器,因為它實在太蹩腳了,當然,這也不是意味著徹底就不能做。舉個例子,當你想實現一個TCP服務器的時候,你可能需要寫出原理大約...
摘要:官方文檔中對協程的示例大多按照一次請求一個協程或腳本并發大量協程的方式來舉例說明這種使用方式下提升的是整體的性能而非單次請求的響應時間要提升單次請求的響應效率或提升非網絡服務下腳本代碼的運行效率需要在業務代碼中主動使用協程來處理那些可并發的 Swoole官方文檔中對協程的示例大多按照一次請求一個協程(或腳本并發大量協程)的方式來舉例說明,這種使用方式下提升的是整體的性能,而非單次請求的...
閱讀 2941·2021-10-14 09:42
閱讀 3706·2021-08-11 11:19
閱讀 3552·2019-08-30 13:57
閱讀 3132·2019-08-30 13:49
閱讀 1545·2019-08-29 18:38
閱讀 905·2019-08-29 13:16
閱讀 1861·2019-08-26 13:25
閱讀 3235·2019-08-26 13:24