本篇解析 example-channel-09.kt。探讨多个协程竞争通道时的分配原则。
1. 核心概念:公平性原则
当多个协程在同一个通道上进行发送和接收时,Channel 遵循先到先得 (FIFO) 的原则。
特点:
- 非霸占性:不会出现一个协程一直霸占通道,而其他协程一直“挨饿”的情况。
- 轮询效果:如果有多个消费者在等待,它们会按照请求接收的先后顺序,轮流获得发射出的数据。
2. 案例分析 (Ping-Pong)
两个玩家(协程)共用一个乒乓球台(Channel)。
- 执行逻辑:
- A 发球 -> B 接收。
- B 回球 -> A 接收。
- 循环往复。
- 结果:输出呈现完美的
ping, pong, ping, pong节奏,充分体现了 Channel 对多个并发协程的公平调度。
3. 开发者感悟
Channel 的公平性是构建高可靠并发系统的基础。在 Android 中,如果你有多个后台同步任务需要访问同一个数据源,利用 Channel 这种“排队领取”的特性,可以天然地避免数据错乱和线程竞争,让业务逻辑变得简单且可预测。