Android Room与协同程序并发读取

时间:2019-06-18 15:59:53

标签: sqlite android-sqlite android-room kotlin-coroutines

我正在使用带有协程的Room存储/检索数据。从另一篇文章中,我看到,从技术上讲,您可以同时从数据库中进行无限次的检索。目前,我正在处理一个非常大的数据集,我想对其进行检索。这大约是10,000,000行。我将其拆分为较小的读段,每个读段的长度分别为4(2,500,000),所有这些并行发生。这将我的检索时间减少了30-40%(这是我想要的)(相对于单个DB读取)。令我困扰的是,当我将此拆分值增加到4以上时,它实际上放慢了速度。我认为添加更多并行协程将继续减少时间。

我验证了所有并行工作的协程都是唯一的线程,因此它们不会发生冲突。

有人知道为什么会这样吗?我在想,Room / SQL可能对并发连接数有限制,但是基于此链接中的(5),情况并非如此:

SQlite Frequently Asked Questions

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您对协程概念有些误解。协程称为轻量级线程,实际上使用的线程数取决于所选的Dispatcher。例如,Default调度程序的最大线程数等于CPU内核数,但至少为两个。为每个协程创建一个单独的线程会很浪费,并且与协程的主要思想之一-应用程序线程消耗优化相矛盾。有关更多详细信息,请参见Coroutine context and dispatchers