面试题答案
一键面试M:N 模型含义
在 Go 协程调度机制的 M:N 模型中,M 代表内核线程(Machine)的数量,N 代表用户态协程(Goroutine)的数量。它允许将多个用户态协程映射到多个内核线程上。即多个协程可以复用少量的内核线程,运行时系统负责在这些内核线程上调度协程的执行。当一个协程阻塞时,运行时系统可以将其他协程调度到同一个内核线程或其他空闲的内核线程上执行,而无需创建新的内核线程。
优势
- 更高的并发度:相比 1:1 模型(一个用户线程对应一个内核线程),M:N 模型能支持更多的并发任务。因为创建和管理大量内核线程开销较大,而 M:N 模型中协程创建开销小,在有限的内核线程上可以调度大量协程,提高了系统整体的并发处理能力。
- 高效的资源利用:与 N:1 模型(多个用户线程映射到一个内核线程)不同,M:N 模型不会因为一个协程的阻塞而导致整个进程被阻塞。当某个协程执行 I/O 等阻塞操作时,运行时系统可以将其他可运行的协程调度到其他内核线程上执行,充分利用多核 CPU 的资源,提升了 CPU 的利用率。
- 灵活性和可扩展性:M:N 模型可以根据系统负载动态调整协程与内核线程的映射关系,在任务较少时可以使用较少的内核线程,任务增多时动态增加内核线程的使用,使得系统在不同负载情况下都能高效运行,具有良好的灵活性和可扩展性。