首頁 >後端開發 >Golang >golang中協程和執行緒的差別是什麼?

golang中協程和執行緒的差別是什麼?

青灯夜游
青灯夜游原創
2019-12-25 18:06:383373瀏覽

golang中協程和執行緒的差別是什麼?

golang中協程和執行緒的差異

#一般來說,協程就像輕量級的執行緒。

執行緒一般有固定的棧,有一個固定的大小。而goroutines為了避免資源浪費(亦或是資源缺乏),採用動態擴張收縮的策略:初始量為2k,最大可以擴張到1G。

每個執行緒都有一個id,在執行緒創建的時候就會被回傳,所以我們可以透過執行緒的id來操縱執行緒。但是在golang中沒有這個概念,因此我們在編碼之初就要考慮協程的創建和釋放問題。

線程和goroutine 切換調度開銷方面

線程/goroutine 切換開銷方面,goroutine 遠比線程小

#線程:涉及模式切換(從用戶態切換到核心態)、16個暫存器、PC、SP...等暫存器的刷新等。

因為協程在用戶態由協程調度器完成,不需要陷入內核,這代價就小了。

所以goroutine:只有三個暫存器的值修改 - PC / SP / DX.

#相關建議:golang教學

以上是golang中協程和執行緒的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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