kotlin - Kotlin 协程:并发执行节流
问题描述
想象一下,我们正在从消息队列中读取消息,并在接收时将它们推送到线程池中进行处理。线程数量有限,所以如果所有线程都忙,我们就会有自然的背压。
在 Kotlin 协程世界中如何解决这个问题?如果我们为每条传入消息创建一个协程,我们很快就会遇到内存不足错误(例如,如果每个任务都需要从数据库加载一些数据)和其他问题。
有没有解决这个问题的机制或模式?
解决方案
解决问题的一种方法是在其上创建一个Channel
和send
您的数据。其他线程可以将 aconsumeEach
放在通道上以从中接收数据。通道的容量可以根据您的线程需求进行调整。
协程文档中的扇出和扇入示例也很有帮助。
推荐阅读
- java - java.security.cert.CertificateException:找不到与 IP 地址 xxxx 匹配的主题备用名称
- python-3.x - 为什么在 Google Colaboratory 中使用 Python3.6 在 google drive.files.update 中出现“错误请求”?
- woocommerce - 如何在 WooCommerce 订阅通知电子邮件中复制客户?
- python - 如何使用 python 正则表达式仅提取联系人页面链接
- mapbox - Mapbox GL JS ImageSource 坐标错误
- swift - NSMenuItem 添加到 NSStatusBar 的操作在选定的函数移动到其他类时显示为灰色
- php - 当 composer.json 中需要 Helpers 文件夹时,将代码部署到 heroku 时出错
- r - purrr split %>% map %>% bind VERSUS dplyr group_by %>% do
- cordova - 在 Ionic 4 应用程序中无法绕过 CORS
- swift - 当我单击主页上的一行时,转到下一页,但不显示上下文