Kotlin协程:并发执行限制

时间:2018-12-12 05:25:47

标签: kotlin coroutine kotlinx.coroutines backpressure

想象一下,我们正在从消息队列中读取消息,并在收到消息后将其推送到线程池中进行处理。线程数有限,因此如果所有线程都忙,我们将产生自然的背压。

在Kotlin协程世界中如何解决这个问题?如果我们将为每个传入消息创建一个协程,那么我们很快就会遇到内存不足错误(例如,如果每个任务都需要从数据库加载某些数据)和其他问题。

有没有解决此问题的机制或模式?

1 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是在数据上创建Channelsend。其他线程可以将consumeEach放在通道上以从通道接收数据。通道的容量可以根据您的线程需求进行调整。

coroutines docs中的扇出和扇入示例也可能会有所帮助。