Coroutines Channels
Java中的多线程通信, 总会涉及到共享状态(shared mutable state)的读写, 有同步, 死锁等问题要处理.
协程中的Channel用于协程间的通信, 它的宗旨是:
Do not communicate by sharing memory; instead, share memory by communicating.
Channel basics
channels用于协程间的通信, 允许我们在不同的协程间传递数据(a stream of values).
生产者-消费者模式
发送数据到channel的协程被称为producer
, 从channel接受数据的协程被称为consumer
.
生产: send, produce.
消费: receive, consume.
当需要的时候, 多个协程可以向同一个channel发送数据, 一个channel的数据也可以被多个协程接收.
当多个协程从同一个channel接收数据的时候, 每个元素仅被其中一个consumer消费一次. 处理元素会自动将其从channel里删除.
Channel的特点
Channel
在概念上有点类似于BlockingQueue
, 元素从一端被加入, 从另一端被消费. 关键的区别在于, 读写的方法不是blocking的, 而是suspending的.
在为空或为满时. channel可以suspend它的send
和receive
操作.
Channel的关闭和迭代
Channel可以被关闭, 说明没有更多