Sqlite Android Room与协同程序并发读取

Sqlite Android Room与协同程序并发读取,sqlite,android-sqlite,android-room,kotlin-coroutines,Sqlite,Android Sqlite,Android Room,Kotlin Coroutines,我正在使用Room with Corroutines来存储/检索数据。从另一篇文章中我看到,从技术上讲,您可以同时从数据库中进行无限次的检索。目前,我正在处理一个非常大的数据集,我想检索它。这大约是10000000行。我将其分成更小的读数,比如4(2500000),所有读数都是并行的。这将使我的检索时间减少30-40%,这正是我想要的(这是相对于单个DB读取)。困扰我的是,当我将这个分割值增加到4之后,它实际上会变慢。我认为增加更多的并行协同程序会持续减少时间 我验证了所有并行工作的协程都是唯一

我正在使用Room with Corroutines来存储/检索数据。从另一篇文章中我看到,从技术上讲,您可以同时从数据库中进行无限次的检索。目前,我正在处理一个非常大的数据集,我想检索它。这大约是10000000行。我将其分成更小的读数,比如4(2500000),所有读数都是并行的。这将使我的检索时间减少30-40%,这正是我想要的(这是相对于单个DB读取)。困扰我的是,当我将这个分割值增加到4之后,它实际上会变慢。我认为增加更多的并行协同程序会持续减少时间

我验证了所有并行工作的协程都是唯一的线程,所以它们不会以这种方式冲突

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


任何帮助都将不胜感激

您对协同程序的概念有点误解。协程称为轻量级线程,实际上使用的线程数取决于所选的调度程序。例如,dispatcher的最大线程数等于CPU核心数,但至少是两个。为每个协同程序创建一个单独的线程是浪费的,这与协同程序的主要思想之一——应用程序线程消耗优化——相矛盾。有关更多详细信息,请参阅