专门针对数据库查询(JDBC)的执行上下文始终是个好主意吗?

我正在创建一个连接关系数据库(Amazon RDS)的播放应用程序。

对数据库进行查询的逻辑被封装在Future中以进行异步执行。

是否为查询设置专用的执行上下文以将其与应用程序使用的上下文分开会带来性能提升?如果可以,为什么?

xvgzxvgzxvgz 回答:专门针对数据库查询(JDBC)的执行上下文始终是个好主意吗?

是的。这是在正常情况下处理此类问题的首选方式。

默认情况下,Play用于处理请求的线程池的默认大小为计算机内核的数量。为了从Play用来处理请求的执行上下文中获得最佳性能,您的动作处理程序代码必须为:

  
    

无阻塞且计算速度快

  

这是因为任何阻塞操作或计算量大的调用都将花费更多时间来执行。一些阻塞请求阻塞了线程池,使没有线程可用于处理较新的请求。在更高的负载下情况会变得更糟,因为在这种情况下,您可能希望通过一些消息返回给用户,而不是用户等待太久才能获得结果(因为所有线程都在忙于处理先前的调用)。

让我们假设在4核计算机上,如果您的操作处理程序执行了阻止调用的操作(需要10秒钟来执行)。如果有4个以上的并发http请求,则即使计算机在计算上未得到充分利用,服务器也将无法处理新请求(直到之前的4个被执行)。理想情况下,服务器可以承担更多的负载。

因此,期望以特殊方式编写动作处理程序代码,以充分发挥Play的优势。

让我们假设您使用Play为其请求处理线程池使用的相同执行上下文,以用于db调用。一些昂贵的数据库调用会阻塞执行上下文,从而使没有线程可用于处理请求。

本文链接:https://www.f2er.com/3162900.html

大家都在问