Go八股文链接:
https://juejin.cn/post/7103456883800801311
通过通信来共享内存
;Go 在 runtime 运行时里实现了属于自己的调度机制GMP,降低了内核态和用户态的切换成本。GMP 模型是 golang 自己的一个调度模型,它抽象出了下面三个结构:
G:
也就是协程 goroutine,由 Go runtime 管理。我们可以认为它是用户级别的线程。P:
processor 处理器。每当有 goroutine 要创建时,会被添加到 P 上的 goroutine 本地队列上,如果 P 的本地队列已满,则会添加到全局队列里。M:
操作系统线程。在 M 上有调度函数,它是真正的调度执行者,M 需要跟 P 绑定,并且会让 P 按下面的原则挑出个 goroutine 来执行:优先从 P 的本地队列获取 goroutine 来执行;如果本地队列没有,从全局队列获取,如果全局队列也没有,会从其他的 P 上偷取 goroutine。