通过查阅资料,了解 Go 语言的启动过程。
启动总体顺序
- 命令行参数解析
- 操作系统相关初始化
- 调度器初始化
- 创建 main.goroutine
- 运行 main 函数
命令行参数初始化
主要是解析命令行参数并保存
操作系统相关初始化
主要是确定操作系统的 CPU 核数,CPU 核数决定默认的了 P 的数量
调度器初始化
调度器的初始化时启动程序的核心
- 设置 M 的最大数量(10000)
- 内存相关初始化
- M 的初始化
- 存储命令行参数和环境变量
- 解析 Debug 调试参数
- 初始化垃圾回收器
- 初始化 poll 时间
- 社会最大的 P 的数量,默认是 CPU 核数
main.goroutine 初始化
- 设置栈的最大值
- 启动后台监控
- 初始化 runtime.init 及 runtime 包
- 启动垃圾回收器
- 初始化 main.init 及用户或第三方引入的包
执行 main.main 函数
执行入口函数,开始运行
参考资料: