调度器

Dispatchers.Default

  • 非主线程
  • 专为CPU密集型进行了优化
  • 用于数组排序、json解析、处理异常判断

它是由JVM上的共享线程池支持的。默认情况下,该调度器使用的最大平行度等于CPU核的数量,但至少是两个。 平行度X保证在该调度器中并行执行的任务不超过X个。

Dispatchers.IO

  • 非主线程
  • 为磁盘、网络io进行了优化
  • 数据库
  • 文件读写
  • 网络处理

该池中的额外线程被创建,并在需要时被关闭。该调度器中的任务所使用的线程数量受限于 kotlinx.coroutines.io.parallelism的值限制。IO_PARALLELISM_PROPERTY_NAMEsystem属性的值限制。
它的默认值是64个线程或内核数(以较大者为准)的限制。

  1. val IO: CoroutineDispatcher = LimitingDispatcher(
  2. this,
  3. systemProp(IO_PARALLELISM_PROPERTY_NAME, 64.coerceAtLeast(AVAILABLE_PROCESSORS)),
  4. "Dispatchers.IO",
  5. TASK_PROBABLY_BLOCKING
  6. )

Dispatchers.Unconfined

�一个不局限于任何特定线程的循环程序调度器。它在当前调用帧中执行冠词的初始延续,并让冠词在相应的暂停函数所使用的任何线程中恢复,而不强制执行任何具体的线程策略。在这个调度器中启动的嵌套的程序形成一个事件循环,以避免 堆栈溢出。

事件循环语义是一个纯粹的内部概念,对执行的顺序没有任何保证,除了所有排队的程序将在当前线程上执行最外层的 的词法范围内的当前线程上执行。

注意:如果你需要你的coroutine在恢复后被限制在一个特定的线程或线程池中,但仍然希望在当前调用帧中执行它,直到它的第一次暂停,那么你可以在coroutine构建器中使用一个可选的[CoroutineStart]参数,如[launch][CoroutineScope.launch]和[async][CoroutineScope.async]将其设置为[CoroutineStart.UNDISPATCHED]值。

Dispatchers.Main

  • 主线程处理ui、这种调度器是单线程的
  • 调用supend函数
  • 调用ui函数
  • 更新livedata

一个只限于在主线程中操作UI对象的循环调度器。这个调度器可以直接使用或通过[MainScope]工厂使用。 通常这种调度器是单线程的。