💡
原文中文,约4100字,阅读约需10分钟。
📝
内容提要
本文介绍了Goroutine调度器的工作原理。Goroutine是Go语言中的并发执行单元,调度器负责将Goroutine与线程配对。调度器采用M:N调度器模型,将M个Goroutine映射到N个内核线程。文章解释了Goroutine、P(逻辑处理器)和M(机器线程)的概念及其工作原理。调度器通过入队排位、线程配对和窃取行为来协同工作。此外,文章还介绍了网络轮询器的作用。
🎯
关键要点
- Goroutine是Go语言中的并发执行单元,调度器负责将Goroutine与线程配对。
- Goroutine调度器采用M:N调度模型,将M个Goroutine映射到N个内核线程。
- Goroutine的优势在于上下文切换、内存占用、创建和销毁的成本。
- 并发是同时处理多个任务,但不一定在同一时间运行;并行是多个任务在同一时刻真正同时运行。
- G代表Goroutine,P代表逻辑处理器,M代表机器线程。
- 每个P有自己的可运行Goroutine列表,最多可容纳256个Goroutine。
- 一个典型的Go程序最多可使用10,000个线程,超过此限制可能导致崩溃。
- 调度器通过入队排位、线程配对和窃取行为来协同工作。
- 当M完成任务后,会主动寻找更多工作,检查全局队列和其他处理器的队列。
- 网络轮询器负责处理与网络相关的调用,避免阻塞当前线程。
🏷️
标签
➡️