首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala.concurrent.blocking用例

scala.concurrent.blocking用例
EN

Stack Overflow用户
提问于 2013-10-30 11:47:52
回答 1查看 19K关注 0票数 75

我偶然发现了scala.concurrent.blocking方法,根据Scala文档,这是.

用于指定一段可能阻塞的代码,允许当前BlockContext调整运行时的行为。正确标记阻塞代码可以提高性能或避免死锁。

我有些怀疑:

  • 产生新线程的因素是什么?
  • 这是否只适用于scala.concurrent.ExecutionContext.Implicits.global执行上下文或用户创建的执行上下文?
  • 如果我用blocking { . }包装任何可执行文件会发生什么?
  • 我们应该使用这个构造的任何实际用例。
EN

回答 1

Stack Overflow用户

发布于 2013-10-30 12:23:16

  1. 当叉/连接池中的所有线程都在使用join结构等待时,新线程将在此池中生成,并且还有更多的工作需要完成,这些工作可能会完成其中的一个线程。或者,如果其中一个ForkJoinWorker线程正在执行除使用join之外的阻塞代码,它可以使用S通知池。
  2. 它可能适用于任何类型的执行上下文--它充当对ExecutionContext实现的通知,即工作线程执行的代码在某些条件下可能处于阻塞状态,并且可以通过使用其他线程计算其他内容来解决此条件。执行上下文可能对此起作用,也可能不起作用。在当前的(2.10,2.11)实现中,blocking将只在默认的全局执行上下文中工作。
  3. 如果用阻塞包装任何可执行文件,就会导致一些运行时开销,所以不要总是这样做。
  4. 如果您的计算时间很长(例如,秒或分钟),或者您正在等待将来使用Await完成,或者您正在等待监视器的条件被解决,那么在所有这些情况下,您都应该使用blocking来解决这个条件,而在所有这些情况下,这些任务/未来都应该在相同的执行上下文上执行。

编辑:

考虑看看在Scala书中学习并发编程中的第4章。

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

https://stackoverflow.com/questions/19681389

复制
相关文章

相似问题

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