💡
原文中文,约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的顺序和频次来优化性能。
- 文章最后提到抢占式调度的内容,鼓励关注公众号获取最新文章。
🏷️
标签
➡️