协程进阶:通道 08. 带缓冲的通道 (Buffered Channels)

本篇解析 example-channel-08.kt。探讨如何平衡生产与消费的速度。

1. 核心概念:缓冲区 (Buffer)

默认通道是“会合”的(无缓冲区)。带缓冲的通道允许发送者在缓冲区未满之前,持续发送数据而不需要挂起等待接收者。

规则解析:

  • 未满时send() 立即执行并返回,不会挂起。
  • 满时send() 会挂起,直到缓冲区有空余位置(被接收者取走)。

2. 代码解析

1
2
3
4
5
6
7
val channel = Channel<Int>(4) // 创建容量为 4 的缓冲区
val sender = launch {
repeat(10) {
println("Sending $it")
channel.send(it) // 发射第 5 个时由于缓冲满了,会在这里挂起
}
}

3. 开发者感悟

缓冲通道是并发系统中的“减震器”。它允许生产和消费两端在一定程度上解耦。在 Android 开发中,如果你有大量高频传感器数据产出,但 UI 渲染较慢,设置一个适当容量的缓冲区能显著提高系统的整体响应性.

,