2013-05-07 98 views
1

Play Framework 2中的所有操作都是异步的吗?还是我必须故意使用Promise来实现这一目标?所有Play Framework 2操作都是异步的吗?

为了说明,IO(NIO)是否在与实际动作逻辑不同的线程上执行?

+1

我大概这么说是一个非常简单的视图,所以就这样(但是我希望你会得到这个主意):不,你的行为不是异步的。那么,不是自动的。关于玩吹牛是异步的东西,你可以返回['AsyncResult's](http://www.playframework.com/documentation/api/2.1.1/scala/index.html#play.api .mvc.AsyncResult),[你可以很容易地创建](http://www.playframework.com/documentation/2.1.1/ScalaAsync)。与其他所有东西一样,它不是异步的,只是给你工具以便轻松使用异步内容 – Carsten 2013-05-07 21:58:17

+0

另外Play的Promises [将被丢弃用于'scala.concurrent.Future's](http://www.playframework.com/documentation/2.1.1/Highlights) – Carsten 2013-05-07 21:58:50

回答

2

这取决于你的意思是什么异步

所有播放操作都是非阻塞的,因为接受HTTP请求的IO线程与运行操作的IO线程不同,并且从不阻止等待操作完成。所以是的,(HTTP)IO在与实际的动作逻辑不同的线程上执行。

虽然,操作本身可能包含可能需要一段时间的计算。因此,他们可能会阻止执行它们的线程。执行数据库操作时通常会出现这种情况,因为大多数数据库驱动程序都处于阻塞状态。

+2

那么究竟是什么使用Promise(或Future)在另一个线程中执行主任务的好处?与具有“足够”线程的操作相比? – bendahmon 2013-05-08 07:15:07

2

要添加到斯特凡的答案,

为了澄清,是IO(NIO)在不同的线程比 实际行动逻辑进行

是的,它是

相关问题