golang Runtime

  1. Golang Runtime
    1. 什么是Golang Runtime
      1. 与其他语言的不同
      2. 协程结构体和切换函数

Golang Runtime

什么是Golang Runtime

Golang Runtime 是go语言运行时所需要的基础设施

  1. 协程调度、内存分配、GC
  2. 操作系统和CPU相关操作的封装(信号处理、系统调用、寄存器操作、原子操作等)、CGO
  3. pprof、trace、race检测的支持
  4. map、channel、string等内置类型及反射的实现

与其他语言的不同

  1. Go是没有虚拟机的概念的,所以runtime也被直接编译成native code

  2. go 语言Runtime 代码和用户代码 是直接打包在一个可执行文件中

  3. Runtime 代码和用户代码在执行的时候并没有明显的界限,就是函数调用关系

  4. go对系统调用的函数进行了封装,可不依赖于glibc

  5. 一些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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏