@foonfyrick

Dispatcher, Default и IO?

Текст из статьи:
Вы можете посмотреть, как Dispatchers.Default инициализируется в методе createDefaultDispatcher. По умолчанию используется DefaultScheduler. Если вы ознакомитесь с реализацией Dispatchers.IO, он также использует DefaultScheduler и позволяет создавать по запросу не менее 64 потоков. Dispatchers.Default и Dispatchers.IO неявно связаны друг с другом, поскольку они используют один и тот же пул потоков.

Вот функция
internal actual fun createDefaultDispatcher(): CoroutineDispatcher =
    if (useCoroutinesScheduler) DefaultScheduler else CommonPool

1) Что такое useCoroutinesScheduler, я вижу что это какой-то systemProp, но это ни о чем не говорит, при создании корутины CoroutineScope(Dispatchers.Default) что из этого влияет на выбор, будет использован DefaultScheduler или CommonPool?
2) По умолчанию используется DefaultScheduler. Если вы ознакомитесь с реализацией Dispatchers.IO, он также использует DefaultScheduler и позволяет создавать по запросу не менее 64 потоков. Dispatchers.Default и Dispatchers.IO неявно связаны друг с другом, поскольку они используют один и тот же пул потоков.

То есть, если Dispatchers.IO использует минимум 64 потока(и почему-то не написали, сколько максимум), а сколько минимум использует Dispatchers.Default, или строка "Dispatchers.Default и Dispatchers.IO неявно связаны друг с другом, поскольку они используют один и тот же пул потоков." подразумевает, что они оба используют минимум 64 потока?
  • Вопрос задан
  • 700 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Я бы на твоём месте перестал читать эту статью и начал читать доку. Это странные домыслы, и погружение в абсолютно лишние детали(погрузиться в которые, при желании, ты можешь и сам, код есть, смотри не хочу).
Dispatchers.IO

The CoroutineDispatcher that is designed for offloading blocking IO tasks to a shared pool of threads.

Additional threads in this pool are created and are shutdown on demand. The number of threads used by tasks in this dispatcher is limited by the value of “kotlinx.coroutines.io.parallelism” (IO_PARALLELISM_PROPERTY_NAME) system property. It defaults to the limit of 64 threads or the number of cores (whichever is larger).

Moreover, the maximum configurable number of threads is capped by the kotlinx.coroutines.scheduler.max.pool.size system property. If you need a higher number of parallel threads, you should use a custom dispatcher backed by your own thread pool.


То есть потоков в пуле max(64, число_ядер).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы