加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala.concurrent.ExecutionContext.Implicits.global的行为是什

发布时间:2020-12-16 09:23:54 所属栏目:安全 来源:网络整理
导读:对于 ExecutionContext特征的scala.concurrent.ExecutionContext.Implicits.global的文档如下: It is possible to simply import scala.concurrent.ExecutionContext.Implicits.global to obtain an implicit ExecutionContext . This global context is a
对于 ExecutionContext特征的scala.concurrent.ExecutionContext.Implicits.global的文档如下:

It is possible to simply import
scala.concurrent.ExecutionContext.Implicits.global to obtain an
implicit ExecutionContext. This global context is a reasonable
default thread pool

“合理违约”是什么意思?

解决方法

默认

它是一个固定大小的ThreadPool,它具有与机器上的处理器一样多的线程.合理的默认值意味着大多数时间对大多数事情都有好处.

什么是“好”的线程池

首先,了解您只能拥有与机器上的内核一样多的线程,这一点很重要.所有其他线程都是所谓的恶魔线程,所有这些都是关于通过队列和执行的智能(在语言/库级别).

CachedThreadPool:许多短暂的/便宜的任务

你产生的线程池的类型很大程度上取决于它们执行的操作.对于很多短暂的动作(比如说数据库查询),你可以使用一个缓存的线程池.

因为每个单独的任务相对便宜,而是产生一个新的线程是昂贵的,所以你最好使用CachedThreadPool.

FixedThreadPool:长时间运行/昂贵的任务

与上述相反,对于非常昂贵的操作,您可能希望限制一次运行的线程数量,原因有很多:内存,性能等.

ForkJoinPool:Divide et impera

当您需要执行非常大的计算时,这种类型的池是有用的,但是您可以将它们划分成较小的位,每个工作人员可以进行计算.

列表继续下去.底线,斯卡拉给你上面所有的东西.具体来说,Scala尝试创建一个ForkJoinPool,如果第一个失败,则默认为ThreadPoolExecutor.

try {
  new ForkJoinPool(
    desiredParallelism,threadFactory,uncaughtExceptionHandler,true) // Async all the way baby
} catch {
  case NonFatal(t) =>
    System.err.println("Failed to create ForkJoinPool for the default ExecutionContext,falling back to ThreadPoolExecutor")
    t.printStackTrace(System.err)
    val exec = new ThreadPoolExecutor(
      desiredParallelism,desiredParallelism,5L,TimeUnit.MINUTES,new LinkedBlockingQueue[Runnable],threadFactory
    )
    exec.allowCoreThreadTimeOut(true)
    exec
}

}

full这里列表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读