一起來做賊:Goroutine原理和Work stealing
最近在看Goroutine的實現原理,使用者空間實現的併發模型。在使用者空間進行排程不比 在核心級別,因為核心可以通過CPU中斷奪回控制權,但是使用者空間把控制權交給一段 程式碼之後,需要那段程式碼主動交出權力才可以。當然也可以通過一些trick,例如編譯 的時候檢測,然後自動插入某些讓出CPU的程式碼。或者在生成的指令中插入。
關於Goroutine網上已經有很多篇很棒的文章了,我認為看這幾篇就夠了:
-
設計文件:ofollow,noindex" target="_blank">https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw/edit
-
比設計文件更詳細並且配圖的部落格:http://morsmachine.dk/go-scheduler
-
Goroutine背後的系統知識:http://webcache.googleusercontent.com/search?q=cache:AoAQmcVigUkJ:www.sizeofvoid.net/goroutine-under-the-hood/+&cd=1&hl=en&ct=clnk&gl=hk
其中當一個P的G佇列消耗完了,就會嘗試去其他P的G佇列裡偷一些任務過來。看看wikipedia: