go深入解析goroutine

Goroutine Scheduler

概述

调度器是go语言运行时最核心的内容,其基本理论建立在三种基本对象(系统线程对象M,抽象处理器对象P,goroutine对象G)

our-cast

M、P、G关系

GO运行时存在两种类型队列(queue):

  • 全局queue
  • 每个P维护自己的G的queue

go-sched

基本对象数据结构

M

P

G

  1. 调用go func(){...}()起一个协程,都会创建一个goroutine对象,代表G并发任务
  2. 所有的G任务都有系统线程M来执行
  3. 每个G对象都有自己的独立栈内存,当M执行任务时,从G用来保存执行现场的字段中恢复相关寄存值。

in-motion

Reference


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!