我正在使用Play框架,了解到Play以非阻塞方式处理每个请求。那么在Scala中,阻塞和非阻塞Future有什么区别呢?
另外,请提供有关Future和Await.Result()方法的信息。
谢谢!!!
我正在使用Play框架,了解到Play以非阻塞方式处理每个请求。那么在Scala中,阻塞和非阻塞Future有什么区别呢?
另外,请提供有关Future和Await.Result()方法的信息。
谢谢!!!
Future
完成之前的任何时刻调用Await.Result()
,则Future
会变成阻塞状态。相反,如果您使用onComplete
、onSuccess
、onFailure
、map
或flatMap
(以及其他一些方法),则注册的回调函数将在Future
返回时发生。因此,Future
是非阻塞的。尽可能使用带有回调的非阻塞Future
。Await.result
之外,在Future中是否有其他可以做的事情,即在Future { <MyCode> }内部,会导致(无意中)Future阻塞?例如,如果我在<MyCode>中使用Java阻塞文件读取调用,那么会导致Future阻塞吗? - Chris PrinceFuture
会在其运行的线程中阻塞,但不一定会阻塞调用线程。但是,如果有大量阻塞的Future
,CPU将被占用,最终调用Future
的线程将面临饥饿问题。 - kliew