Swoole在2.0開始內建協程(Coroutine)的能力,提供了具備協程能力IO介面(統一在命名空間Swoole\Coroutine\*)。
開啟協程時請在編譯時加入--enable-coroutine編譯選項。
協程可以理解為純粹使用者狀態的線程,其透過協作而不是搶佔來進行切換。相對於進程或線程,協程所有的操作都可以在使用者態完成,創建和切換的消耗更低。 (推薦學習: swoole視訊教學)
Swoole可以為每個請求建立對應的協程,根據IO的狀態來合理的調度協程,這會帶來了以下優勢:
開發者可以無感知的用同步的程式碼編寫方式達到非同步IO的效果和效能,避免了傳統非同步回呼所帶來的離散的程式碼邏輯和陷入多層回呼中導致程式碼無法維護。
同時由於swoole是在底層封裝了協程,所以對比傳統的php層協程框架,開發者不需要使用yield關鍵字來標識一個協程IO操作,所以不再需要對yield的語意進行深入理解以及對每一層的呼叫都修改為yield,這極大的提高了開發效率。
協程API目前針對了TCP,UDP等主流協定client的封裝,包括:
UDP
##TCP HTTPMysqlRedis可以滿足大部分開發者的需求。對於私有協議,開發者可以使用協程的TCP或UDP介面去方便的封裝。啟用
Prerequisite:PHP版本要求:>= 5.5,包括5.5、5.6、7.0、7.1#基於swoole_server或swoole_http_server進行開發,目前只支援在onRequet, onReceive, onConnect等事件回呼函數中使用協程。 swoole_server和swoole_http_server將為每個請求建立對應的協程,開發者可以在onRequet、onReceive、onConnect 事件回呼中使用協程客戶端。
以上是swoole如何實現協程的詳細內容。更多資訊請關注PHP中文網其他相關文章!