Go Runtime
Go 运行时 Part 1 Runtime基础 01 Runtime是什么 Go runtime 是 Go 程序运行时依赖的一组基础设施。它不是 JVM 那种执行字节码的虚拟机,也不是一个需要单独安装和启动的外部进程。普通 Go 程序在编译链接之后,最终生成的是机器码可执行文件;runtime 会作为程序的一部分被链接进去,在程序启动、并发调度、内存分配、垃圾回收、栈管理、阻塞唤醒、网络轮询、定时器、panic/recover 等方面提供支持。 可以先把 Go 程序理解成两部分: TEXT用户代码 main.main 业务函数 package init 普通 goroutine 运行时 程序启动 goroutine 调度 栈增长 内存分配 GC channel/select timer netpoll syscall/signal panic/recover 这两部分最终在同一个进程里执行。用户代码看起来像是在直接调用函数、创建 goroutine、分配对象、读写 channel,但很多操作背后都会落到 runtime 的实现上。 例如下面这段代码: GOpackage main func main() { ch := make(chan int) go func() { ch <- 1 }() println(<-ch) } 表面上只有 make(chan int)、go func()、发送、接收几个语法动作;底层则至少涉及: ...