我对协程有一些疑问:我可以并行启动大量的协程,工作繁重吗?
例如,我有一个对象列表,我想为每个对象做一些繁重的工作。
- 我可以做一个
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/