golang Runtime
Golang Runtime
什么是Golang Runtime
Golang Runtime 是go语言运行时所需要的基础设施
- 协程调度、内存分配、GC
- 操作系统和CPU相关操作的封装(信号处理、系统调用、寄存器操作、原子操作等)、CGO
- pprof、trace、race检测的支持
- map、channel、string等内置类型及反射的实现
与其他语言的不同
Go是没有虚拟机的概念的,所以runtime也被直接编译成native code
go 语言
Runtime
代码和用户代码
是直接打包在一个可执行文件中Runtime
代码和用户代码
在执行的时候并没有明显的界限,就是函数调用关系go对系统调用的函数进行了封装,可不依赖于glibc
一些go的关键字被编译器编译成了runtime包下的函数
关键字 函数 go newproc new newobject <- -> chansend1,chanrecv1
协程结构体和切换函数
type g struct {
goid int64 // 协程id
status uint32 // 协程状态
stack struct {
lo uintptr // 该协程拥有的栈低位
hi uintptr // 该协程拥有的栈高位
}
sched gobuf // 切换时保存的上下文信息
startfunc uintptr // 程序地址
}
type gobuf struct {
sp uintptr // 栈指针位置
pc uintptr // 运行到的程序位置
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件.
文章标题:golang Runtime
文章字数:337
本文作者:AlexBruce Lu
发布时间:2019-12-13, 14:29:45
最后更新:2019-12-13, 15:28:45
原始链接:https://alexbrucelu.github.io/2019/12/13/golangRuntime/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。