scala.concurrent.ExecutionContext.Implicits.global的行为是什
对于
ExecutionContext特征的scala.concurrent.ExecutionContext.Implicits.global的文档如下:
“合理违约”是什么意思? 解决方法
默认
它是一个固定大小的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这里列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |