go-GMP模型


探索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)可以切换同时执行这些步骤协程,实现高效的任务处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值