Cur*_*ate 4 multithreading android kotlin kotlin-coroutines kotlin-stateflow
我为 Android 开发应用程序。我想知道我可以同时观察多少个 Kotlin Stateflow?我所做的每件事observe都是在我自己创建的、由 IO 调度程序调度或由 Android 框架的生命周期组件提供的不同 CoroutineScope 上完成的。
我已经完成了各种操作,例如在协程内无限循环中进行简单添加,并使用 Android Studio 分析器,我观察到启动大量执行计算的协程会导致 CPU 负载过高。
考虑到Stateflow 永远不会完成,它上的每个收集都是阻塞的,并且在不同的 CoroutineScope 上完成,如示例和文档所述,我可以一次观察到的 Stateflow 的最大数量是多少,而不必担心我会高度使用 CPU,创建太多线程还是只是耗尽了设备资源?
订阅仍然是协程,而且协程很便宜。我们绝对没有可以告诉你的普遍界限。
其上的每个收集都会阻塞
它会暂停,不会阻塞。并且您始终可以使用takeWhile或类似的方法仅从中进行收集,直到您可以停止为止,或者您可以取消正在进行收集的协程(例如使用withTimeout)。
对性能的主要限制是更新aMutableStateFlow所需的时间与该订阅者的数量成线性关系StateFlow,因此,如果您更新StateFlow具有一千个订阅者的 a ,则比更新只有一个订阅者的 a 所需的时间要长约一千倍MutableStateFlow。