具有协程异步构造的自定义线程池
Custom Thread Pool with Coroutine async construct
我正在使用异步构造并行执行某些任务。
ids.forEach { id -> val result = async { getResult(id) } }
我有2个这方面的问题。
- 我相信并行执行这些任务的默认线程池将有 max(1, CPUs -1) 个线程。这个理解对吗?
- 我想改用自定义线程池。
val context = newFixedThreadPoolContext(15, "custom pool")
如何将此池传递给异步构造。
请指教
默认情况下 async()
从调用它的上下文中继承协程调度程序。如果您创建一个单线程上下文并在其中调用 async()
,那么它将在相同的单线程环境中 运行。
在某些情况下,调度程序可能未指定,例如如果你使用 GlobalScope.async()
。在这种情况下,使用 Dispatchers.Default
。 Documentation 表示:
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) }
我正在使用异步构造并行执行某些任务。
ids.forEach { id -> val result = async { getResult(id) } }
我有2个这方面的问题。
- 我相信并行执行这些任务的默认线程池将有 max(1, CPUs -1) 个线程。这个理解对吗?
- 我想改用自定义线程池。
val context = newFixedThreadPoolContext(15, "custom pool")
如何将此池传递给异步构造。 请指教
默认情况下 async()
从调用它的上下文中继承协程调度程序。如果您创建一个单线程上下文并在其中调用 async()
,那么它将在相同的单线程环境中 运行。
在某些情况下,调度程序可能未指定,例如如果你使用 GlobalScope.async()
。在这种情况下,使用 Dispatchers.Default
。 Documentation 表示:
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) }