Kotlin 协程:并发执行限制
Kotlin coroutines: concurrent execution throttling
假设我们正在从消息队列中读取消息,并在接收时将它们推送到线程池中进行处理。线程数量有限,如果所有线程都忙,我们就会有自然的背压。
如何在 Kotlin 协程世界中解决这个问题?如果我们为每个传入消息创建一个协程,我们很快就会遇到内存不足错误(例如,如果每个任务都需要从数据库加载一些数据)和其他问题。
有什么机制或模式可以解决这个问题吗?
解决该问题的一种方法是在上面创建 Channel
和 send
您的数据。其他线程可以在通道上放置一个 consumeEach
以从中接收数据。通道的容量可以根据您的线程需求进行调整。
coroutines docs 中的扇出和扇入示例也很有帮助。
假设我们正在从消息队列中读取消息,并在接收时将它们推送到线程池中进行处理。线程数量有限,如果所有线程都忙,我们就会有自然的背压。
如何在 Kotlin 协程世界中解决这个问题?如果我们为每个传入消息创建一个协程,我们很快就会遇到内存不足错误(例如,如果每个任务都需要从数据库加载一些数据)和其他问题。
有什么机制或模式可以解决这个问题吗?
解决该问题的一种方法是在上面创建 Channel
和 send
您的数据。其他线程可以在通道上放置一个 consumeEach
以从中接收数据。通道的容量可以根据您的线程需求进行调整。
coroutines docs 中的扇出和扇入示例也很有帮助。