Диспетчер сопрограмм Kotlin, такой как Default, но без основного потока (UI). - PullRequest
0 голосов
/ 12 апреля 2019

Есть ли способ создать (или каким-то образом получить) диспетчер сопрограмм Kotlin на Android, который действует как «По умолчанию», но исключает касание ядер потоков пользовательского интерфейса?

Так что в основном я сталкиваюсь с тяжелыми вычислительными задачами, которые мне нужныобрабатывать как можно больше ресурсов ЦП, не влияя на производительность пользовательского интерфейса.

С Dispatchers.Default я получаю больше ресурсов из системы, но в то же время мой пользовательский интерфейс замедляется.

Какие лучшие практики можно применить здесь?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Оказывается, мое решение проблем было не в области JVM, а в NDK.Нативные библиотеки загружали процессор до 100%, и, похоже, я ничего не могу поделать с Java / KotlinПохоже, что ответ где-то в коде C, что не входит в мои компетенции.

Также я должен упомянуть решение Executors.newFixedThreadPool((Runtime.getRuntime().availableProcessors() - 1).coerceAtLeast(1)).asCoroutineDispatcher().Мне кажется, что это может быть полезно для кого-то, имеющего проблему с подобной проблемой.

0 голосов
/ 12 апреля 2019

Вы можете использовать диспетчер с пользовательским пулом потоков следующим образом:

val threads = 4
val dispatcher = Executors.newFixedThreadPool(threads).asCoroutineDispatcher()
...