2013-10-21 36 views
2

据我所知,为了使应用程序真正无阻塞,所有执行IO操作的库(例如数据库驱动程序)都应该意识到它们在select循环内部运行并应该将他们的文件描述符添加到主列表中,以便他们的IO可以正确调度。因此,如果我使用随机驱动程序(如https://github.com/mauricio/postgresql-async),它将阻止其他客户端的所有HTTP处理,同时等待查询完成。我是否应该使用某些特定的Play(或其他底层的)知道的驱动程序?用于Play框架的非阻塞数据库驱动程序

+0

如果它是非阻塞客户端,它为什么会阻塞任何东西? –

回答

-1

要把你的数据库查询到后台线程, 并返回一个承诺玩:

http://www.playframework.com/documentation/2.0/ScalaAsync 

斯卡拉2.10集成了阿卡的期货实现:

http://doc.akka.io/docs/akka/2.2.1/scala/futures.html#introduction 

免责声明 - 我从来没有使用播放...

+0

多路复用服务器的整体思想是,你只需要一个线程同时处理多个请求。 – synapse

+0

这就是应该如何处理“后台线程”作为参与者。以http://reactivemongo.org/为例。如果驱动程序以某种方式阻止,则应将其自动包装到承诺和期货中。 – Rajish

+2

在另一个线程上抛出您的查询是* not *非阻塞。它仅仅阻塞另一个线程。 – nilskp

相关问题