MST

星途 面试题库

面试题:Go语言中Goroutine调度机制的M:N模型是什么

请简述Go语言Goroutine调度机制中M:N模型的具体含义,以及它相较于其他调度模型(如1:1、N:1)有哪些优势?
34.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

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:1模型中每个Goroutine都对应一个操作系统线程,创建大量线程会消耗大量系统资源(如内存)。而M:N模型中多个Goroutine复用少量操作系统线程,大大降低资源开销,可创建更多Goroutine,提高并发性能。
    • 阻塞处理:在1:1模型里,如果某个Goroutine发生系统调用等阻塞操作,对应的操作系统线程也会阻塞。而M:N模型下,当一个Goroutine阻塞时,调度器可将其他Goroutine调度到其他活跃的操作系统线程上执行,提高了线程利用率。
  2. 与N:1模型相比
    • 并行能力:N:1模型所有Goroutine都在一个操作系统线程中执行,无法利用多核CPU的并行计算能力。M:N模型能将不同Goroutine调度到不同的操作系统线程上,充分利用多核CPU资源,提升程序的并行处理能力。