简单介绍GMP调度器模型

一、调度器的由来

动机:单进程计算机只能一个任务一个任务地处理;CPU浪费
CPU调度器:轮询调度进程A\B\C,时间片轮转调度。这种有切换成本。
多线程的劣势
1.每个线程创建一个线程,导致频繁切换线程CPU消耗
2.每个进程、线程占用一定内存
在这里插入图片描述

N:1的协程关系,线程调度CPU,通过一个调度器切换协程,避免CPU高消耗
在这里插入图片描述

go协程:改了内存->几KB;灵活调度;
GM调度器模型的缺点
1.创建、销毁、调度G需要频繁地获取锁,造成激烈地锁竞争
2.从M转移到G会造成延迟和额外的系统负载
3.系统调用导致频繁的线程阻塞和取消阻塞操作增加了系统开销

二、GMP模型

在这里插入图片描述

新建goroutine会放到localP中,最大256G,不行再放到全局队列中
在这里插入图片描述

P数量可以设置,M数量根据程序动态销毁

三、GMP设计

设计策略分为四种:复用线程、利用并行、抢占、全局G队列
复用线程的两个机制:working stealing和hand off

3.1 working stealing机制

在这里插入图片描述

M2空闲,所以从M1从偷取协程。(先从localP偷,再从global偷)

3.2 hand off机制

在这里插入图片描述
在这里插入图片描述

M1阻塞在G1,创建和唤醒一个线程,绑定G1和M1

3.3 利用并行:GOMAXPROCS = CPU核数/2

3.4 新的协程会抢占老协程

四、go func()执行过程

在这里插入图片描述

大循环:创建协程-》进入局部队列-》M获取G-》小循环(调度-》执行-》时间片用完)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值