17.Goroutine的基本模型和调度设计策略

1.基础模型

1.1.单进程时代的两个问题

  • 当一执行流程、计算机智能一个任务一个任务处理
  • 进程堵塞所带来的CPU浪费时间

1.2.能不能宏观的执行多个任务呢?

1.3.多线程/多进程解决了阻塞问题

新的问题

说明

面临的问题

  • 多线程 随着 同步竞争(如 锁、竞争资源冲突等)
  • 开发设计 变的越来越复杂

1.4.思考

1.4.1.空间切分

延伸

继续演化

1.4.2.Golang对协程的处理

早期调度器的处理




早期调度器缺点

  • 创建、销毁、调度G都需要每个M获取锁,这就形成了激烈的所竞争。
  • M转移G会造成延迟和额外的系统负载
  • 系统调用(cpu在M之间的切换)导致频繁的线程堵塞和取消操作增加了系统开销

GMP

详细说明

2.调度器设计策略

  • 复用线程
    • work stealing机制
    • hand off 机制
  • 利用并行
    • GOMAXPROCS限定P的个数
    • = CPU核数/2
  • 抢占
  • 全局G队列

2.1.work stealing机制


2.2.hand off 机制




2.3.抢占

早期的方式i


goroutine方式


2.4.全局G队列


posted @ 2021-10-09 17:56  可可逗豆  阅读(49)  评论(0)    收藏  举报