MPG
May 17, 2023Less than 1 minute
MPG
在操作系统提供的内核线程之上,Go 搭建了一个特有的用户级线程模型。传统的函数调用是将函数指针存储在内存的栈空间上,但是栈空间只允许操作系统进行操作,我们能拿到的只限于堆内存,所以 Go 开发者在堆上申请一块内存,将寄存器 %rsp 以及寄存器 %rbp 指过去,从而将这块内存伪装成用户栈,从而巧妙地实现了并行运行用户级线程 goroutine。要聊 Go 的线程实现模型,必须要知道以下 3 个核心元素:
- M:machine 缩写,一个 M 代表一个内核线程。
- P:processer 缩写,一个 P 代表执行一个 Go 代码片段所需的必要资源。
- G:goroutine 缩写,一个 G 代表一个 Go 代码片段。