Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

为什么需要 GMP?根本问题:如何用少量 OS 线程,高效运行海量并发任务? 操作系统线程很重(栈默认 1-8MB,切换需要内核介入,创建销毁开销大)。但我们想要能轻松启动 百万级并发 的语言。 这逼出了一个核心设计决策:在用户态实现调度。 三个核心实体G(Goroutine)— 任务 用户态”线程”,初始栈仅 2-4KB,可动态增长 本质是一个描述”待执行函数”的结构体 状态:Runn...
Go

1. 根本问题:并发程序如何安全地共享数据?并发的本质矛盾是:多个执行流(goroutine)需要协作,但同时访问共享内存会导致数据竞争。 解决思路有两条: 共享内存 + 锁:大家都能访问,但要抢锁(mutex) 消息传递:数据的所有权随消息转移,不共享 Go 选择了后者,并将其哲学浓缩为一句话: “Don’t communicate by sharing memory; share ...
Go