sponsored links

跟雨痕大大看golang源码-01初始化

最近看了下的雨痕大大写的go1.5源码剖析的pdf,觉得有必要写点东西来巩固一下。

本人水平有限,第一次写,大家轻喷啊。

01初始化
一开始雨痕大大就通过汇编代码找到了初始化里面几个关键的函数。

跟雨痕大大看golang源码-01初始化

  1. runtime.args 没什么好看的就是传入cmd的运行参数。
  2. runtime.osinit 就是看一下系统的核数。
  3. runtime.schedinit比较重要

runtime.schedinit
有初始化栈,内存分配器和调度器, 垃圾回收器, 还会进行一次procresize调整一下GMP的并发调度中P的数量。

  1. runtime·newproc(SB)和runtime·mstart(SB)就是用来运行runtime.main函数的。

  2. runtime·main 会启动 sysmon一个辅助控制goroutine和垃圾回收程序。runtime_init runtime包的init函数。gcenable 启动gc的。 main_init() 初始化用户包的init函数。main_main用户逻辑入口

最后雨痕大大给了个强调:

  • 所有init函数都在同一个goroutine内运行。
  • 所有init函数结束后才会执行main.main函数。
Tags: