运行时:并发调度

严格来说 goroutine 不能从字面层来翻译称之为协程,它实际上是一套相对完整的虚拟机。

goroutine 模型

Go 语言的 goroutine 模型相对来说设计的不错,goroutine 模型使用的是多对多模型。多对多模型被一些操作系统一些语言 Rust、Java 抛弃,而改用一对一模型,因为一对一模型性能高,但是对于海量的并发操作未必是最优秀的。

Go 语言更适合 IO 密集型,对 CPU 密集型来说它对运行时调度不是很合理,它对 CPU 密集计算上不是很好,但是在 IO 密集上做的很好。

PMG 模型

调度器最根本的任务就是让多个 goroutine 执行。第一确保 goroutine 能执行,第二确保 goroutine 尽可能快执行,第三确保多个 goroutine 之间公平性。

我们抛开硬件只说基本架构,goroutine 本身是基于并发设计的。如果它是虚拟机的话,它首先需要处理器,处理器决定了同时可以运行任务的数量。其次需要并发任务。最后需要具体执行机构,进程的执行机构是线程,在这里把线程抽象出线程。因为运行时是单进程,所以不需要额外的任务调度,三种机构基本可以完成。

我们用一个示意图,PMG 模型代表处理器来控制并发,线程负责具体执行,并发任务来保存任务状态,各自承担自己的角色,共同协作来完成并发任务执行。

下面详细描述各种对象的指责

P 对象

运行时怎么抽象这个并发模型呢,首先抽象出一个概念叫 P,代表处理器的意思。P 控制并发的数量,即控制同时可以执行的线程的数量。把 P 的数量限制为 4 意味着只

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值