什么是GMP模型,它为什么快?
GMP 模型 是 Go 语言实现高并发的核心,也是它“快”的根本原因。下面将拆解模型本身,再说明为什么这种设计能让 Go 在处理大量并发任务时既高效又轻量。 一、GMP 模型是什么 GMP 是 Goroutine、Machine、Processor 三个组件的缩写: G (Goroutine) Go 的“协程”,可以理解为用户态的轻量级线程。 一个 Goroutine 只占 2KB 左右的栈空间(可动态伸缩),创建、销毁、切换的成本远低于操作系统线程(通常线程栈 1~8MB)。 M (Machine) 操作系统线程的抽象,由内核管理。 一个 M 对应一个真实的内核线程,负责执行 Goroutine 的代码。 P (Processor) 处理器,是 G 和 M 之间的“调度器”。 每个 P 维护一个本地的 Goroutine 队列,并持有执行 Go 代码所需的资源(如内存分配缓存等)。 P 的数量通常等于 CPU 核心数(由 GOMAXPROCS 控制)。 核心关系: 一个 M 必须绑定一个 P 才能执行 G。 一个 P 可以绑定多个 M,但同一时刻只能有一个 M 与其绑定并执行 G。 G 被调度到 P 的本地队列或全局队列,M 通过 P 获取 G 并执行。 二、调度流程(如何工作) 初始化 启动时,会创建与 GOMAXPROCS 数量相等的 P,并启动一个初始 M。 ...