golang中協程和執行緒的差異
#一般來說,協程就像輕量級的執行緒。
執行緒一般有固定的棧,有一個固定的大小。而goroutines為了避免資源浪費(亦或是資源缺乏),採用動態擴張收縮的策略:初始量為2k,最大可以擴張到1G。
每個執行緒都有一個id,在執行緒創建的時候就會被回傳,所以我們可以透過執行緒的id來操縱執行緒。但是在golang中沒有這個概念,因此我們在編碼之初就要考慮協程的創建和釋放問題。
線程和goroutine 切換調度開銷方面
線程/goroutine 切換開銷方面,goroutine 遠比線程小
#線程:涉及模式切換(從用戶態切換到核心態)、16個暫存器、PC、SP...等暫存器的刷新等。
因為協程在用戶態由協程調度器完成,不需要陷入內核,這代價就小了。
所以goroutine:只有三個暫存器的值修改 - PC / SP / DX.
#相關建議:golang教學
以上是golang中協程和執行緒的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!