C語言中文網 目錄
首頁 > Go語言教程 > Go語言并發 閱讀:3,864

goroutine和coroutine的區別

C#、Lua、Python 語言都支持 coroutine 特性。coroutine 與 goroutine 在名字上類似,都可以將函數或者語句在獨立的環境中運行,但是它們之間有兩點不同:
  • goroutine 可能發生并行執行;
  • 但 coroutine 始終順序執行。

狹義地說,goroutine 可能發生在多線程環境下,goroutine 無法控制自己獲取高優先度支持;coroutine 始終發生在單線程,coroutine 程序需要主動交出控制權,宿主才能獲得控制權并將控制權交給其他 coroutine。

goroutine 間使用 channel 通信,coroutine 使用 yield 和 resume 操作。

goroutine 和 coroutine 的概念和運行機制都是脫胎于早期的操作系統。

coroutine 的運行機制屬于協作式任務處理,早期的操作系統要求每一個應用必須遵守操作系統的任務處理規則,應用程序在不需要使用 CPU 時,會主動交出 CPU 使用權。如果開發者無意間或者故意讓應用程序長時間占用 CPU,操作系統也無能為力,表現出來的效果就是計算機很容易失去響應或者死機。

goroutine 屬于搶占式任務處理,已經和現有的多線程和多進程任務處理非常類似。應用程序對 CPU 的控制最終還需要由操作系統來管理,操作系統如果發現一個應用程序長時間大量地占用 CPU,那么用戶有權終止這個任務。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo