具有协程异步构造的自定义线程池

Custom Thread Pool with Coroutine async construct

我正在使用异步构造并行执行某些任务。

ids.forEach { id -> val result = async { getResult(id) } }

我有2个这方面的问题。

  1. 我相信并行执行这些任务的默认线程池将有 max(1, CPUs -1) 个线程。这个理解对吗?
  2. 我想改用自定义线程池。
val context = newFixedThreadPoolContext(15, "custom pool")

如何将此池传递给异步构造。 请指教

默认情况下 async() 从调用它的上下文中继承协程调度程序。如果您创建一个单线程上下文并在其中调用 async(),那么它将在相同的单线程环境中 运行。

在某些情况下,调度程序可能未指定,例如如果你使用 GlobalScope.async()。在这种情况下,使用 Dispatchers.DefaultDocumentation 表示:

By default, the maximum number of threads used by this dispatcher is equal to the number of CPU cores, but is at least two.

async() 与您自己的调度程序一起使用非常简单:

async(context) { getResult(id) }