gpt4 book ai didi

scala - 计算 ExecutionContext 中的线程数

转载 作者:行者123 更新时间:2023-12-04 07:41:06 24 4
gpt4 key购买 nike

假设我想知道给定 ExecutionContext 中有多少个线程.
所以我正在写一个这样的函数

def count(implicit ec: ExecutionContext): Int = {
val promise = Promise[Unit]
val counter = new AtomicInteger(0)
for (_ <- 0 to 1000) Future {
counter.getAndIncrement()
Await.ready(promise.future, Duration.Inf)
}
val result = counter.get()
promise.success(())
result
}
它不适用于 ExecutionContext.global至少所以我改变了实现:
def count(implicit ec: ExecutionContext): Int = {
val barrier = new CyclicBarrier(1000)
var isReset = false
for (_ <- 0 to 1000) Future { if (!isReset) barrier.await() }
val result = barrier.getNumberWaiting
barrier.reset()

// make all futures complete and release all threads to allow JVM to exit
isReset = true

result
}
它有效,但我想知道
  • 为什么第一个实现不起作用;
  • 如何改进“障碍”实现(例如摆脱 isReset );
  • ExecutionContext 中计算线程数的最佳方法是什么?是。
  • 最佳答案

    例如,尝试转换到特定的执行者

    implicit val ec = scala.concurrent.ExecutionContext.Implicits.global
    Future(42)
    ec.asInstanceOf[java.util.concurrent.ForkJoinPool].getPoolSize // : Int = 1

    关于scala - 计算 ExecutionContext 中的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67460565/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com