區別:1、goroutine透過通道來通信,coroutine透過讓出和恢復操作來通信。 2.goroutine協程間不完全同步,可利用多核心並行運行;coroutine協程間完全同步,不會並行。 3.goroutine可在多個協程/執行緒上切換;coroutine在一個執行緒中運行。 4.應用程式長時間大量佔用CPU,goroutine中用戶有權終止這個任務,coroutine不行。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
C#、Lua、Python 語言都支援 coroutine 特性。 coroutine 與goroutine 在名字上類似,都可以將函數或語句在獨立的環境中運行,但是它們之間有兩點不同:
goroutine 可能發生並行執行;
但coroutine 總是會依序執行。
goroutines 意味著並行(或者可以以並行的方式部署),coroutines 一般來說不是這樣的,goroutines 通過通道來通信;coroutines 通過讓出和恢復操作來通信, goroutines 比coroutines 更強大,也很容易從coroutines 的邏輯復用到goroutines。
狹義地說,goroutine 可能發生在多線程環境下,goroutine 無法控制自己獲取高優先權支持;coroutine 總是發生在單線程,coroutine 程式需要主動交出控制權,宿主才能獲得控制權並將控制權交給其他coroutine。
goroutine 間使用 channel 通信,coroutine 使用 yield 和 resume 操作。
goroutine 和 coroutine 的概念和運作機制都是脫胎於早期的作業系統。
coroutine 的運作機制屬於協作式工作處理,早期的作業系統要求每個應用程式必須遵守作業系統的任務處理規則,應用程式在不需要使用 CPU 時,會主動交出 CPU 使用權。如果開發者無意間或故意讓應用程式長時間佔用 CPU,作業系統也無能為力,表現出來的效果就是電腦很容易失去回應或當機。
goroutine 屬於搶佔式任務處理,已經和現有的多執行緒和多行程任務處理非常類似。應用程式對 CPU 的控制最終還需要由作業系統來管理,作業系統如果發現一個應用程式長時間大量佔用 CPU,那麼使用者有權終止這個任務。
coroutine和goroutine的區別總結
區別一:
goroutine 透過通道來溝通;
#coroutine透過讓出和恢復操作來通訊
區別二:
goroutine協程間不完全同步,可以利用多核心並行運行,具體要看channel的設計;
#coroutine協程間完全同步,不會並行
區別三:
goroutine可以在多個協程在多個執行緒上切換,既可以用到多核心,又可以減少切換開銷。
coroutine只在一個執行緒中運行,只在一個執行緒中運行
區別四:
goroutine作業系統如果發現一個應用程式長時間大量佔用CPU,那麼使用者有權終止這個任務。
coroutine如果開發者無意間或故意讓應用程式長時間佔用 CPU,作業系統也無能為力,表現出來的效果就是電腦很容易失去回應或當機。
以上是goroutine和coroutine的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!