Skip to content
bobohume edited this page Aug 28, 2025 · 4 revisions

为什么需要mpsc

  • actor 模型已消息队列为主

  • golang 通用模型 GMP(groutinue+channel)

  • actor 模型已多生成者但消费者为主

  • 试想下一个场景,假如actor用channel,channel内部是有容量的,当容量满了以后,gmp模型会把当前actor所在的g 放到netpoller 线程上去,那投递给这个actor的生产者会被卡住不在执行,一直到actor消费完数据,其他生产者actor才会被继续执行

  • 实际生产环境有很多actor其他actor被其中一个actor拖垮,导致系统无法进行下去

mpsc 引入

  • mpsc 可以理解位mailbox,邮箱概念,我投递邮件之后,就不用管之后,后续等接收者拆邮件
  • 每个actor各自消息,生成者只管投递msg给指定actor,也不用管我投递是否成功

mpsc 优势

  1. 无锁队列

2.mailbox无锁等待

mpsc aba问题

  • SwapPointer 代替 CompareAndSwapPointer来解决aba问题

Clone this wiki locally