android - 协程限制?

标签 android performance kotlin kotlin-coroutines

我对协程有一些疑问:我可以并行启动大量的协程,工作繁重吗?

例如,我有一个对象列表,我想为每个对象做一些繁重的工作。

  • 我可以做一个 for 循环并一次为每个对象启动一个协程吗?
  • Coroutine如何并行处理大量工作?
  • 如果内存太低,Coroutine 会等待再启动另一个 Coroutine?
  • 例如,最好用 newFixedThreadPoolContext 来限制协程?

最佳答案

Can I launch a large numbers of Coroutines, with heavy work, in parallel?

是的,你可以。 Coroutines 非常轻量级。事实上,许多协程示例表明您可以一次启动数千个协程。

Can I do a For loop and launch a Coroutine for each object in one time ?

是的,你可以。虽然我不知道那会有多高效。

How Coroutine can handle a large number of work in parallel ?

协程具有 Dispatchers 的概念,它允许您配置线程。

If memory is too low, Coroutine will waits before launch another Coroutine ?

协程的行为类似于轻量级线程,因此内存管理由您决定。如果系统没有足够的内存,我不知道会阻止协程启动的内置机制。同样,协程是轻量级的,因此如果您无法启动协程,则可能出现了问题。

It is better to limit Coroutines with a newFixedThreadPoolContext for example ?

通过使用 newFixedThreadPoolContext,您并没有真正限制可以启动的协同程序的数量。您只是对将创建以启动协程的 ThreadPool 实现限制。同样来自 newFixedThreadPoolContext docs请注意,它将在未来被替换。

关于android - 协程限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59736855/

相关文章:

c++ - C/C++ : Float comparison speed

java - 对于 Kotlin 中的高阶函数,为什么 lambda 会显示在其他函数参数之外?

android - 谷歌地图 v2 标记动画

android - 如何在配套设备配对屏幕中捕获用户取消?

android - 创建抽屉布局的标题?

java - CollapsingToolbarLayout 海拔不工作和锚定 FloatingActionButton 不返回

Django 国际化性能问题(USE_I18N=False 时为 3-4 秒 vs 300 毫秒)

ruby - 如何在 ruby​​ Array Map 中构造对象?

android - 如何在官方 Youtube 应用程序中检测当前正在播放的视频

kotlin - 如何使用 Kleisli 访问调用链的每个函数中的上下文?