【问题标题】:What is non blocking and blocking future in Scala?Scala 中的非阻塞和阻塞未来是什么?
【发布时间】:2016-11-20 11:07:30
【问题描述】:

我正在使用播放框架,我读到 Play 以非阻塞方式处理每个请求。 那么Scala中阻塞和非阻塞Future有什么区别呢?

还请提供有关 Future & Await.Result() 方法的信息 谢谢!!!

【问题讨论】:

标签: scala async-await future nonblocking


【解决方案1】:

如果在Future 完成之前的任何时间调用Await.Result()Future 就会阻塞。如果您改为使用onCompleteonSuccessonFailuremapflatMap(以及其他一些方法),则您正在注册一个回调函数,该函数将在Future 返回时发生。因此,Future 是非阻塞的。尽可能使用带有回调的非阻塞 Futures。

【讨论】:

  • 我是 Scala 的新手。这是否意味着 Await 阻塞了正在执行的线程?我不理解“未来变得阻塞”的语言。
  • 是的,正在执行的线程被阻塞,直到等待的Future完成
  • 谢谢。这有帮助。现在我试图了解,除了Await.result 之外,在未来是否可以在 内做一些事情,即在 Future { } 内会导致(比如说,无意地)未来阻止?例如,假设我在 中使用 Java 阻塞文件读取调用。这会导致 Future 阻塞吗?
  • Future 会阻塞在它运行的线程中,但不一定会阻塞调用线程。但是如果你有很多阻塞Futures,CPU就会被占用,最终调用Futures的线程将面临饥饿。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2012-08-14
  • 2016-07-06
  • 2012-10-31
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
相关资源
最近更新 更多