山高月小,水落石出。

CSP(Communicating Sequential Processes)详解

CSP(通信顺序进程)详解 CSP(通信顺序进程)是由图灵奖得主托尼·霍尔提出的并发系统代数理论‌,核心思想是通过独立进程间的显式消息通信替代共享内存,从根源上降低并发编程的复杂度。 📜 理论起源与发展 1978年,英国计算机科学家 ‌托尼·霍尔‌ 首次正式阐述CSP理论,1985年出版同名专著《Communicating Sequential Processes》。 1984年,霍尔与合作者提出TCSP理论,扩展出事件隐蔽、递归等核心算子,形成完整的基于事件的代数演算系统。 CSP 是 Tony Hoare(图灵奖得主,快速排序的发明者)在 1978 年发表的一篇同名论文中提出的并发编程理论模型。它的核心主张极其简洁: 不要通过共享内存来通信,而应该通过通信来共享内存。 “Do not communicate by sharing memory; instead, share memory by communicating.” 这句话后来成为 Go 语言并发哲学的灵魂,也是 Go 官方文档里反复强调的设计原则。理解 CSP,才能理解为什么 Go 的并发原语长成 goroutine + channel + select 这个样子。 一、CSP 要解决什么问题 在 CSP 出现之前,并发编程的主流范式是共享内存 + 锁。多个线程读写同一块内存,靠互斥锁、信号量、条件变量保证正确性。这种范式的问题在实践中暴露得非常充分: 问题 表现 竞态条件(Race Condition) 结果依赖线程调度的时序,偶发、难复现 死锁(Deadlock) 两个线程各持一把锁、互相等对方的锁 锁粒度难把握 锁太粗性能差,锁太细正确性难保证 可读性差 锁的获取/释放散落在各处,逻辑不连贯 CSP 提出的思路是从根本上取消共享内存这个媒介:每个并发实体(在 CSP 里叫"进程",在 Go 里叫 goroutine)拥有私有的状态,它们之间只能通过消息传递来交换数据。既然没有共享内存,就不需要锁,竞态和死锁问题在模型层面被大幅消解。 二、CSP 的核心抽象 CSP 理论模型里有三个基本要素: ...

October 22, 2026 · 3 min · zwdart