文章
这里收录了我发布的全部文章。
-
Go 运行时(一):GMP 调度模型
Go 运行时通过 G(goroutine)、M(OS thread)、P(logical processor)三级抽象实现 M:N 线程调度。P 的引入(Go 1.1)解决了全局锁竞争,work-stealing 保证负载均衡,异步抢占(Go 1.14+,SIGURG 信号)消除了 CPU 密集型 goroutine 的饥饿问题。Go 1.25 起 GOMAXPROCS 自动感知容器 cgroup CPU 限制。
-
Go 并发(五):并发模式与最佳实践
Go 的并发编程远不止 goroutine + channel。生产级代码需要掌握 context 传播与取消树、errgroup 有界并发、worker pool 模式、graceful shutdown 全流程、race detector 的 CI 集成,以及至少十种常见反模式的识别与规避。本文是"如何在生产环境写出正确并发 Go 代码"的完整指南。
-
Go 并发(四):无锁编程层次-从 CAS 到消除共享
CAS 既是乐观锁也是无锁编程,不矛盾——"乐观锁"描述并发策略,"无锁"描述实现方式(不用 mutex)。比 CAS 更激进的方向是 FAA(一次成功)→ 分片(消除共享)→ RCU(读者零开销)。
-
Go 并发(三):内存模型、happens-before 与同步语义
Go 内存模型定义了 happens-before 偏序关系,它是 sequenced-before(单 goroutine 内语句顺序)和 synchronized-before(跨 goroutine 同步操作)的传递闭包。只有通过 happens-before 关联的写操作才保证对读操作可见。2022 年(Go 1.19)修订正式赋予 sync/atomic 顺序一致性语义,与 C++ seq_cst、Java volatile 对齐。任何存在 data race 的 Go 程序行为未定义——不存在"良性竞争"。