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

scala.concurrent.blocking的坏用例?

发布时间:2020-12-16 09:24:48 所属栏目:安全 来源:网络整理
导读:参考 this接受的答案中的第三点,对于长期运行的计算,无论是CPU还是IO绑定,使用阻塞进行“未来”内部的任何情况都是毫无意义的. ? 解决方法 这取决于你的Future正在执行的ExecutionContext. 无意义: 如果ExecutionContext不是BlockContext,那么使用阻塞将毫
参考 this接受的答案中的第三点,对于长期运行的计算,无论是CPU还是IO绑定,使用阻塞进行“未来”内部的任何情况都是毫无意义的. ?

解决方法

这取决于你的Future正在执行的ExecutionContext.

无意义:

如果ExecutionContext不是BlockContext,那么使用阻塞将毫无意义.也就是说,它将使用DefaultBlockContext,它只是执行代码而无需任何特殊处理.它可能不会增加那么多开销,但仍然毫无意义.

坏:

当线程池即将耗尽时,Scala的ExecutionContext.Implicits.global用于在ForkJoinPool中生成新线程.也就是说,如果它知道将通过阻止发生.如果你产生了很多线程,这可能会很糟糕.如果你在很短的时间内排队做了很多工作,全球背景将会很快扩展到僵局. @ dk14的答案更深入地解释了这一点,但要点是它可以成为性能杀手,因为托管阻塞实际上可能变得很快无法管理.

阻塞的主要目的是避免线程池中的死锁,因此它与性能切线相关,因为达到死锁会比产生更多线程更糟糕.但是,它绝对不是一个神奇的性能增强器.

我在this answer特别写了关于阻塞的文章.

(编辑:李大同)

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

    推荐文章
      热点阅读