☰
第108篇 Channel 与 select:协程间通信
2026/10/8 1:44:18 网站建设 项目流程

上一节讲协程与线程的性能差别,这一节讲协程之间怎么传数据。Channel是协程世界里最基础的原语之一——比 Flow 更底层、比回调更结构化。面试里问它的追问往往很刁:Channel 和 Flow 到底什么关系、send满了会怎样、select解决了什么问题、什么时候该用Channel而不是Flow。这一节把这些一次讲清。

先把结论放在前面:Channel是"点对点的消息通道",Flow是"面向流的序列"。Channel 有明确的容量(capacity)与缓冲策略(onBufferOverflow),满了会挂起发送方或丢弃;Flow 没有容量概念,靠emit的挂起实现背压。select解决的是"同时等多个通道,谁先来就走谁"这类多路等待问题。判据是:需要在"生产者-消费者"之间传递离散事件、或者要在多个来源之间竞争,就用 Channel;需要在"上游-下游"之间处理连续数据流,就用 Flow。

机制背后的执行路径

Channel 的类型要分清,这是高频考点:

// RENDEZVOUS:零容量,发不出去的 send 直接挂起直到有人接 val a = Channel<String>(Channel.RENDEZVOUS) // BUFFERED:默认容量 64(可通过 Cha

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询