摘要:Go 能很好的在用户空间支持并发模型,这也是 Go 如此火热的原因,那今天我们来学习 Go 的调度机制。

数据结构

G 结构体

  G 是 goroutine 的缩写,相当于操作系统中的进程控制块,在这里就是 goroutine 的控制结构,是对 goroutine 的抽象,下面是 G 的结构(只列出了部分与调度有关的):

//用于保存上下文的 gobuf 结构体
type gobuf struct {
    sp   uintptr  //栈指针,上下文中的 sp 指针
    pc   uintptr  //程序计数器,上下文中的 pc 指针
    g    guintptr //指向当前 g  的指针
    ...
}
//用于表示一个等待链表上的 goroutine
type sudog struct {
    g *g  //阻塞列表上的 G

    next *sudog  //双向链表后指针
    prev *sudog  //双向链表前指针
    elem unsafe.Pointer //该 goroutine 的数据指针

    c        *hchan
    ...
}
基础结构

相关文章:

  • 2018-11-21
  • 2021-11-06
  • 2021-09-10
  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-08
  • 2022-01-04
猜你喜欢
  • 2022-12-23
  • 2021-07-05
  • 2021-11-08
  • 2021-07-14
  • 2021-11-27
  • 2021-09-21
相关资源
相似解决方案