协程进阶:通道 09. 通道的公平性 (Fairness)

本篇解析 example-channel-09.kt。探讨多个协程竞争通道时的分配原则。

1. 核心概念:公平性原则

当多个协程在同一个通道上进行发送和接收时,Channel 遵循先到先得 (FIFO) 的原则。

特点:

  • 非霸占性:不会出现一个协程一直霸占通道,而其他协程一直“挨饿”的情况。
  • 轮询效果:如果有多个消费者在等待,它们会按照请求接收的先后顺序,轮流获得发射出的数据。

2. 案例分析 (Ping-Pong)

两个玩家(协程)共用一个乒乓球台(Channel)。

  • 执行逻辑
    1. A 发球 -> B 接收。
    2. B 回球 -> A 接收。
    3. 循环往复。
  • 结果:输出呈现完美的 ping, pong, ping, pong 节奏,充分体现了 Channel 对多个并发协程的公平调度。

3. 开发者感悟

Channel 的公平性是构建高可靠并发系统的基础。在 Android 中,如果你有多个后台同步任务需要访问同一个数据源,利用 Channel 这种“排队领取”的特性,可以天然地避免数据错乱和线程竞争,让业务逻辑变得简单且可预测。

,