设为首页 加入收藏

TOP

goroutine调度(四)
2023-07-23 13:29:03 】 浏览:85
Tags:goroutine 调度
1,M2,M3各自扫描本地队列P1,P2,P3
  • M1,M2,M3各自从P1,P2,P3取出G3,G1,G6
  • G6执行完成,M3扫描P3发现是空的,然后扫描全局队列
  • 但是全局队列也是空的,然后就检查网络轮询中已就绪的G
  • 但是网络轮询中没有已就绪的G,所以M3随机的从其他P中窃取一半的G到P3
  • 如果随机选中的P中没有要执行的G,就会重试4次,从其他P获取
  • 总结:

    • 轻量级 goroutine
    • 处理 IO 和系统调用
    • goroutine 的并行执行
    • 可扩展
    • 高效/工作窃取

    Go 调度的局限性

    • FIFO 对局部性原则不利
    • 没有 goroutine 优先级的概念(不像 Linux 内核)
    • 没有强抢占 -> 没有强公平或延迟保证
    • 它没有意识到系统拓扑 -> 没有真实的位置。有一个旧的 NUMA 感知调度程序提案。此外,建议使用 LIFO 队列,这样 CPU 内核缓存中更有可能有数据。

    翻译自:

    https://mukeshpilaniya.github.io/posts/Go-Schedular/

    首页 上一页 1 2 3 4 下一页 尾页 4/4/4
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇Golang GMP原理(2) 下一篇分享Go书籍-《Go Web编程》

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目