首頁 後端開發 Golang goroutine和coroutine的差別是什麼

goroutine和coroutine的差別是什麼

Jan 10, 2023 pm 06:31 PM
golang go語言 goroutine coroutine

區別:1、goroutine透過通道來通信,coroutine透過讓出和恢復操作來通信。 2.goroutine協程間不完全同步,可利用多核心並行運行;coroutine協程間完全同步,不會並行。 3.goroutine可在多個協程/執行緒上切換;coroutine在一個執行緒中運行。 4.應用程式長時間大量佔用CPU,goroutine中用戶有權終止這個任務,coroutine不行。

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,作業系統也無能為力,表現出來的效果就是電腦很容易失去回應或當機。

【相關推薦:Go影片教學程式設計教學

以上是goroutine和coroutine的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用 Golang 安全地讀取和寫入檔案? 如何使用 Golang 安全地讀取和寫入檔案? Jun 06, 2024 pm 05:14 PM

如何使用 Golang 安全地讀取和寫入檔案?

如何為 Golang 資料庫連線配置連線池? 如何為 Golang 資料庫連線配置連線池? Jun 06, 2024 am 11:21 AM

如何為 Golang 資料庫連線配置連線池?

Golang 與 C++ 的異同 Golang 與 C++ 的異同 Jun 05, 2024 pm 06:12 PM

Golang 與 C++ 的異同

golang框架架構的學習曲線有多陡峭? golang框架架構的學習曲線有多陡峭? Jun 05, 2024 pm 06:59 PM

golang框架架構的學習曲線有多陡峭?

如何在 Golang 中從列表中產生隨機元素? 如何在 Golang 中從列表中產生隨機元素? Jun 05, 2024 pm 04:28 PM

如何在 Golang 中從列表中產生隨機元素?

golang框架的優缺點比較 golang框架的優缺點比較 Jun 05, 2024 pm 09:32 PM

golang框架的優缺點比較

Golang 框架中的錯誤處理最佳實務有哪些? Golang 框架中的錯誤處理最佳實務有哪些? Jun 05, 2024 pm 10:39 PM

Golang 框架中的錯誤處理最佳實務有哪些?

golang框架的優勢有哪些? golang框架的優勢有哪些? Jun 06, 2024 am 10:26 AM

golang框架的優勢有哪些?

See all articles