go-runtime
golang 为什么效率高,goroutine 的是怎么执行的?golang runtime 是什么?本文将会对 golang runtime 进行简析。
runtime包的作用
golang 的 runtime 在 golang 中的地位类似于 Java 的虚拟机,不过 go runtime 不是虚拟机。golang 程序生成可执行文件在指定平台上即可运行,效率很高, 它和 c/c++ 一样编译出来的是二进制可执行文件。我们知道运行 golang 的程序并不需要主机安装有类似 Java 虚拟机之类的东西,那是因为在编译时,golang 会将 runtime 部分代码链接进去。
golang 的 runtime 核心功能包括以下内容:
- 协程(goroutine)调度(并发调度模型)
- 垃圾回收(GC)
- 内存分配
- 使得 golang 可以支持如 pprof、trace、race 的检测
- 支持 golang 的内置类型 channel、map、slice、string等的实现
- 等等
下图是 golang 程序、runtime、可执行文件与操作系统之间的关系。区别于 Java 需要安装虚拟机,go 语言的可执行文件已经包含了 golang 的 runtime,它为用户的 go 程序提供协程调度、内存分配、垃圾回收等功能。此外还会与系统内核进行交互,从而真正的利用好 CPU 等资源。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 胡椒粉的秋天!