
Golang-GPM调度原理
一、概述 1. 为什么在内核的线程调度器之外,Go 还需要实现一个自己的调度器 主要解决系统线程太重的问题: 创建与切换线程 太重:都需要在用户态和内核态之间切换,开销较大; 系统线程内存使用 太重:一方面,创建系统线程时会分配一段大部分情况下都用不完的栈内存,造成浪费;另一方面,栈内存空间创建后其大小不会再变化,有溢出的风险。 goroutine 是 Go 语言实现的用户态的线程,可以看做是对系统线程进行的一层抽象。有了这层抽象,Golang 程序员不会直接面对系统线程,直接使用 goroutine 就可以了,而操作系统不会 care 什么 goroutine,只是执行设定好的系统线程就好了。这层抽象,就是 Go 的调度器,后面会详细说明。Go 很精巧地解决了上述两个问题: ...