Mind and Hand Help

Concurrency

如何形象地理解并发

从人的行为角度来看,理解并发最简易的思维就是多个人做同一件事

第一次思考包含的三个关键点

  • 多个人

  • 动作 (做)

  • 内容 (同一件事)

深入思考,本质上只包含两个点

  • 多个人

  • 动作 (动作的执行已经包含的了执行的内容)

不同角度理解

从行为上看,虽然是多个人,但是动作的逻辑往往是相同的。

从结果上看,期望所要做的事的结果是正确的。

并发的设计思路

从不同角度的理解的结论,一个并发系统的整体设计,一般有两种思路

  • 从行为上,从前到后设计

  • 从结果上,从后到前设计

并发系统并不是一个单一过程,所以最终在设计落地的时候,要结合设计

一些思考

为什么软件开发中会存在并发?并发是为了让资源充分的利用。

行为上从前到后

生产者消费者模式

  • 一边负责生产

  • 一边负责消费

  • 关键点是数据交互的方式

    • 生产者生产的数据如何给到消费者

    • 因此:消费也能分为主动消费,被动消费

      • 主动消费是消费者主动拿到数据。生产者的生产数据和消费者中间存在数据通道

      • 被动消费是消费者提供消费的逻辑。生产者的生产数据后调度分配到消费上

从生产者消费者到 Reactor

netty在Selector上的设计就是一种被动消费的设计

netty在EventLoop上又是一种主动消费的设计

结果上从后到前

分治思想 (fork/join)

例如对一组数据分开计算,合并结果。

正确地累加

AtomicInteger

Go中的思想

不要通过共享内存来通信

要通过通信来共享内存

设计的思考

一个软件系统是整体的,并发系统也是一样的。

整个并发系统设计关注的是过程的正确与高效。

行为上的设计有时候也包含着结果上的设计,因为行为的过程是包含中间结果的。

27 January 2026