GMP模型原创
@TOC 探索golang的GMP模型以及线程进程、协程
我们把国家看成一个计算机,我有一个餐馆,该餐馆就是为一个进程,餐馆内的厨师就是一个线程,每位厨师都需要完成指定任务,有个客户点了一桌菜,厨师要完成这个客户的任务,将每个菜都列举出来,并且过程都想清楚了,等待厨师执行,每个过程认为都是一个协程
# GMP模型
- G(Goroutine) 定义:Goroutine 是 Go 语言中轻量级线程的概念,它由 Go 运行时环境(runtime)管理。 特点:Goroutine 是并发执行的基本单位,相比传统线程更轻量级,可以高效地处理大量的并发任务。 使用:通过关键字 go 可以创建一个 Goroutine,让函数在一个新的 Goroutine 中并发执行。
- M(Machine) 定义:M 是 Go 语言运行时系统(runtime system)中的一个概念,负责管理和执行 Goroutine。 特点:M 直接映射到操作系统线程,每个 M 对应一个操作系统线程,负责调度执行 Goroutine。 作用:M 负责将 Goroutine 分配给操作系统线程执行,并处理 Goroutine 的调度和管理。
- P(Processor) 定义:P 是 Go 运行时系统中的调度上下文(scheduling context),用于调度 Goroutine 在 M 上执行。 特点:P 负责管理一组 Goroutine 队列,决定哪些 Goroutine 应该运行在哪个 M 上。 作用:P 负责 Goroutine 的调度、管理和执行,保证 Goroutine 能够有效地并发执行。
# 进程、线程、协程
# 举例子
# 餐馆
餐馆被视作为进程,在 GMP 模型中,可以将整个餐馆看作一个进程(P)。进程负责管理整个执行过程,并分配任务给线程(M)执行。
# 厨师
厨师作为线程:每位厨师可以对应到 M(machine),负责执行具体的任务。每个厨师(M)都可以同时处理多个菜(协程)。
# 菜品
每道菜品可以视为一个独立的任务(Goroutine,G)。厨师(M)可以并发地处理多个菜品任务(G),烹饪流程作为协程的执行过程:每道菜的制作过程可以被分解为不同的步骤,每个步骤可以被看作是一个协程(G)。厨师(M)可以切换同时执行这些步骤协程,实现高效的任务处理
上次更新: 2024/07/30, 22:53:10