goroutine调度器揭秘 2

goroutine调度器揭秘 2

💡 原文中文,约4100字,阅读约需10分钟。
📝

内容提要

这篇文章是关于Go语言调度器的工作原理的解析。调度器的核心函数是schedule和findRunnable。schedule函数执行调度器循环,选择并执行可运行的goroutine。findRunnable函数寻找可执行的goroutine,包括本地和全局运行队列、定时器、网络事件等。文章还提到了一些内部函数和优化策略。

🎯

关键要点

  • 文章讨论了Go语言调度器的工作原理,核心函数为schedule和findRunnable。
  • schedule函数执行调度器循环,选择并执行可运行的goroutine,永不返回。
  • goroutine的栈切换技术避免了栈溢出,确保每个goroutine的函数调用栈独立。
  • 多个内部函数会调用schedule函数,如goexit、preemptPark、park_m等。
  • findRunnable函数是调度器的核心,负责寻找可执行的goroutine。
  • 可执行的goroutine来源包括本地运行队列、全局运行队列、网络事件和定时器等。
  • findRunnable函数的实现复杂,需考虑多种因素,但逻辑清晰。
  • findRunnable的步骤包括检查定时器、tracer、gc worker、local和global run queue等。
  • 调度器可以通过调整寻找goroutine的顺序和频次来优化性能。
  • 文章最后提到抢占式调度的内容,鼓励关注公众号获取最新文章。
🏷️

标签

➡️

继续阅读