golang 的runtime機制

runtime負責管理任務調度,垃圾收集與運行環境。

同時go提供了一些高級的功能,人哦goroutine,channel以及gc,這些高級功能需要runtime的支持。runtime和用戶編譯後的代碼被linker靜態鏈接起來,形成可執行文件。這個文件從操作系統角度來說是可執行文件。從運行角度說,這個文件由用戶代碼和runtime組成。runtime通過接口函數調用來管理goroutine,channel以及一些高級功能。從用戶代碼發起的調用操作系統API的調用都會被runtime攔截。

go runtime的一個重要組成部分是goroutine scheduler。負責追蹤,調度每個goroutine運行,實際上是從應用程序的process所屬的thread pool中分配一個Thread來執行這個goroutine。因此和jvm中的java thread和os thread映射概念類似,每個goroutine只有分配到一個os thread才能運行。