【问题标题】:Custom Thread Pool with Coroutine async construct带有协程异步构造的自定义线程池
【发布时间】:2021-08-29 06:49:31
【问题描述】:

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

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

在这方面我有 2 个问题。

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

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

【问题讨论】:

标签: multithreading kotlin threadpool kotlin-coroutines


【解决方案1】:

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

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

默认情况下,此调度程序使用的最大线程数等于 CPU 内核数,但至少为两个。

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

async(context) { getResult(id) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2021-12-27
    • 2010-09-27
    相关资源
    最近更新 更多