面试题答案
一键面试M:N模型含义
在Go语言Goroutine调度机制的M:N模型中:
- M:代表操作系统线程(Machine),是操作系统层面的执行单元。
- N:代表Goroutine(Goroutine),是Go语言层面的轻量级线程。 M:N模型表示多个Goroutine可以映射到多个操作系统线程上。Go运行时(runtime)的调度器负责在M个操作系统线程上高效地调度N个Goroutine,使得Goroutine可以并发执行。
M:N模型相较于其他调度模型的优势
- 与1:1模型相比
- 轻量级与资源利用:1:1模型中每个Goroutine都对应一个操作系统线程,创建大量线程会消耗大量系统资源(如内存)。而M:N模型中多个Goroutine复用少量操作系统线程,大大降低资源开销,可创建更多Goroutine,提高并发性能。
- 阻塞处理:在1:1模型里,如果某个Goroutine发生系统调用等阻塞操作,对应的操作系统线程也会阻塞。而M:N模型下,当一个Goroutine阻塞时,调度器可将其他Goroutine调度到其他活跃的操作系统线程上执行,提高了线程利用率。
- 与N:1模型相比
- 并行能力:N:1模型所有Goroutine都在一个操作系统线程中执行,无法利用多核CPU的并行计算能力。M:N模型能将不同Goroutine调度到不同的操作系统线程上,充分利用多核CPU资源,提升程序的并行处理能力。