Akka / Scala Future背后的理念是,当我们发现阻塞的代码片段(如IO调用,网络调用等)时,我们必须将其包装在未来并在某个时间点之后异步获取结果。但是,之前阻塞主线程的阻塞代码现在在Future支持的单独线程中阻塞。然后Akka / Scala Future给我们买了什么。
val blockingCallResult: Result = block() //blocks the thread of execution.
now let's use Akka/Scala future and wrap the blocking call with Future
val future = Future[Result] {
val blockingCallResult: Result = block() //also blocks on some thread in thread pool
blockingCallResult
}
我们如何通过使用未来获益。
答案 0 :(得分:4)
如果您只有一个执行上下文,并且您只使用执行阻止代码的期货,并且一次只能使用一个,那么使用未来确实没有优势。期货的优点是:
答案 1 :(得分:1)
如果代码中有任何阻塞操作,则实际上,将执行该操作的线程将被阻塞。无论产生什么执行上下文。如果您希望流程是纯粹的非阻塞性的,并且要获得使用期货的真正好处,那么您的IO必须是异步的。但是如上所述,期货在其他方面也有帮助。