跳到主要内容

并发设计

数据竞争

概念

  • data race: 多个 goroutine 并发访问同一变量,且至少一个写入;
  • 风险: 结果不确定,程序行为不可靠;
  • 处理方式: channel 传递数据、mutex 保护共享数据、避免共享可变状态;

CSP 模型

概念

  • CSP: Communicating Sequential Processes;
  • 核心思想: 并发实体通过通信协作,而不是直接共享状态;
  • Go 表达: goroutine 表示并发执行单元,channel 表示通信通道;
  • 实践原则: 通过通信共享内存,而不是通过共享内存通信;

基本原则

概念

  • 所有权: 明确哪个 goroutine 负责修改某份数据;
  • 通信: 使用 channel 传递数据或事件;
  • 共享: 必须用锁或其他同步原语保护;
  • 退出: goroutine 应有明确结束条件;
  • 边界: 每个 goroutine 内部自行处理 panic 或将错误传回调用方;

机制选择

问题优先机制
goroutine 间传递数据channel
保护共享可变状态mutex 或其他同步原语
避免 data race明确所有权或同步访问
防止 goroutine 泄漏设计明确的退出条件