在swoole中,因為協程的切換是串列的,在同一個時間點只能運行一個協程,一個協程正在運行時,其他協程會停止工作,所以swoole的協程是基於單一線程的。
本教學操作環境:Windows10系統、Swoole4版、DELL G3電腦
#簡單的說協程是寄宿在線程下程式設計師實現的一種跟更輕量的並發的協作輕量級線程
隨著程式設計師人群的增大,大佬也不斷的爆發式增長,當然就開始有人覺得線程不好用了,那怎麼辦呢?當然是基於線程的理念上再去實現一套更加輕量級、更好騙star的一套輕量級線程(事實上協程不能完全被認為線程,因為一個線程可以有多個協程)
協程 使用者狀態
調度方式
#執行緒的調度方式為系統調度,常用的調度策略有分時調度、搶佔調度。說白就是線程的調度完全不受自己控制協程的調度方式為協作式調度 不受內核控制由自由策略調度切換
上述說了協程是用戶態的,所以所謂的協作式調度直接可以理解為是程式設計師寫的調度方式,也就是我想怎麼調度就怎麼調度,而不用透過系統核心被調度。淺入理解swoole的協程
既然打算淺入理解的swoole的協程,我們必須要知道swoole的協程模型。swoole的協程是基於單一執行緒。可以理解為協程的切換是串列的,再同一個時間點只運行一個協程.
Swoole的協程在底層實作上是單執行緒的,因此同一時間只有一個協程在工作,協程的執行是串列的。這與執行緒不同,多個執行緒會被作業系統調度到多個CPU並行執行。 一個協程正在運作時,其他協程會停止運作。當前協程執行阻塞IO操作時會掛起,底層調度器會進入事件循環。當有IO完成事件時,底層調度器恢復事件對應的協程的執行。 對CPU多核心的利用,仍然依賴Swoole引擎的多進程機制。 推薦學習:swoole教學
以上是swoole協程為什麼是單線程的詳細內容。更多資訊請關注PHP中文網其他相關文章!