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才能运行。