首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >知道何时在ExecutionContext.Implicits.global中完成所有作业

知道何时在ExecutionContext.Implicits.global中完成所有作业
EN

Stack Overflow用户
提问于 2015-02-25 02:27:53
回答 1查看 239关注 0票数 1

我有一个简单的程序来使用ExecutionContext.Implicits.global中的期货来执行阻塞IO。我想对执行此IO的性能进行100次测试,但是我的循环在所有未来完成之前就结束了。是否有一种方法仅在所有推送到ExecutionContext的任务完成时才终止?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 03:58:49

在没有任何代码的情况下,我将提供一个简单的版本,但请注意,这是一种不准确的测量方法,对于花费很少时间的事情来说不是很好。只有当你的测量需要相当长的时间,所以大部分时间都花在未来,而不是在测试代码中,这才是真正有用的。

代码语言:javascript
复制
import scala.concurrent._
import scala.concurrent.duration._
import ExecutionContext.Implicits.global

val myList = (1 to 10)

val start = System.currentTimeMillis

val seqFutures = for (elem <- myList) yield {
    Future {
      Thread.sleep(5000) // blocking operation
    }
}

val result = Future.sequence(seqFutures)

Await.result(result, 30.seconds)
val end = System.currentTimeMillis

println(s"${end-start} seconds")

如果要有大量的阻塞IO调用,那么配置一个单独的执行上下文是值得的,该上下文仅为阻塞IO配置一个更大的线程池,以避免阻塞IO消耗所有线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28710091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档