Kotlin协程:并发执行限制

问题描述 投票:3回答:1

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

如何在Kotlin协同世界中解决这个问题?如果我们将为每个传入消息创建一个协同程序,我们可以非常快速地结束内存不足错误(例如,如果每个任务需要从DB加载一些数据)和其他问题。

是否有任何机制或模式可以解决这个问题?

kotlin coroutine kotlinx.coroutines backpressure
1个回答
2
投票

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

coroutines docs中的扇出和扇入示例也很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.