gpt4 book ai didi

scala - scala.concurrent.blocking 的坏用例?

转载 作者:行者123 更新时间:2023-12-04 22:59:38 26 4
gpt4 key购买 nike

引用this中的第三点已接受的答案,是否存在使用 blocking 毫无意义或不好的情况?对于长时间运行的计算,无论是 CPU 还是 IO 密集型,都在 Future 内执行?

最佳答案

这取决于 ExecutionContext您的 Future正在执行中。

无意义:

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

错误:

斯卡拉的ExecutionContext.Implicits.global用于在 ForkJoinPool 中生成新线程当线程池即将耗尽时。也就是说,如果它知道这将通过 blocking 发生。 .如果您产生大量线程,这可能会很糟糕。如果您在短时间内排队处理大量工作,global上下文将愉快地扩展,直到陷入僵局。 @dk14 的回答更深入地解释了这一点,但要点是它可能成为性能杀手,因为托管阻塞实际上很快就会变得难以管理。
blocking的主要目的|是为了避免线程池中的死锁,因此它与性能密切相关,因为达到死锁会比产生更多线程更糟糕。但是,它绝对不是一个神奇的性能增强器。

我写过更多关于 blocking 的文章特别是在 this answer .

关于scala - scala.concurrent.blocking 的坏用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663410/

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