go——协程调度

线程实现模型

Go实现的是两级线程模型(M︰ N),准确的说是GMP模型,是对两级线程模型的改进实现,使它能够更加灵活地进行线程之间的调度。

背景

在这里插入图片描述
三种线程模型

线程实现模型主要分为:内核级线程模型、用户级线程模型、两级线程模型,他们的区别在于用户线程与内核线程之间的对应关系。

1.font<color =red >内核级线程模型(1:1)

1个用户线程对应1个内核线程,这种最容易实现,协程的调度都由CPU完成了

在这里插入图片描述

优点:
1.实现起来最简单
2.能够利用多核
3.如果进程中的一个线程被阻塞,不会阻塞其他线程,是能够切换同一进程内的其他线程继续执行
缺点︰
1.上下文切换成本高,创建、删除和切换都由CPU完成

**2.用户级线程N:1 **

在这里插入图片描述

优点:
1.上下文切换成本低,在用户态即可完成协程切换
缺点:
1.无法利用多核
2.一旦协程阻塞,造成线程阻塞,本线程的其它协程无法执行

两级线程模型(M:N)CMP

在这里插入图片描述

优点:
1.能够利用多核
2.上下文切换成本低
3.如果进程中的一个线程被阻塞,不会阻塞其他线程,是能够切换同一进程内的其他线程继续执行
缺点:
1.实现起来最复杂


GMP模型和GM模型

G(Goroutine)
代表Go协程Goroutine,存储了Goroutine的执行栈信息、Goroutine状态以及Goroutine的任务函数等。G的数量无限制,理论上只受内存的影响,创建一个G的初始栈大小为2-4K,配置一般的机器也能简简单单开启数十

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值