Java 在JDBC本质上是阻塞的情况下使用Play框架是否有益
我正在一个项目中使用Java的play框架。我们有很多并发用户,所以我们决定使用play重写整个项目,以从其非阻塞特性中获益,从而支持更多并发用户。该项目背后的数据库是Oracle,正如您所知,所有JDBC驱动程序都使用阻塞IO,除了。 我搜索了很多,得出的结论是,目前还没有使Oracle JDBC驱动程序无阻塞的解决方案。然而,Oracle在其本机OCI驱动程序中支持非阻塞调用(不幸的是,它基于轮询而不是回调或中断),甚至没有实验项目!这证明,人们还没有感觉到这种需要,这肯定是有原因的。当然,我找到了下面的链接,这是Java的一个链接,但Oracle没有Java 在JDBC本质上是阻塞的情况下使用Play框架是否有益,java,oracle,jdbc,nonblocking,playframework-2.5,Java,Oracle,Jdbc,Nonblocking,Playframework 2.5,我正在一个项目中使用Java的play框架。我们有很多并发用户,所以我们决定使用play重写整个项目,以从其非阻塞特性中获益,从而支持更多并发用户。该项目背后的数据库是Oracle,正如您所知,所有JDBC驱动程序都使用阻塞IO,除了。 我搜索了很多,得出的结论是,目前还没有使Oracle JDBC驱动程序无阻塞的解决方案。然而,Oracle在其本机OCI驱动程序中支持非阻塞调用(不幸的是,它基于轮询而不是回调或中断),甚至没有实验项目!这证明,人们还没有感觉到这种需要,这肯定是有原因的。当然,
这就引出了我的问题。当我有一个针对Oracle的阻塞JDBC驱动程序时,使用Play framework真的有好处吗 使用后台线程进行JDBC连接,并通过消息与此线程通信
老实说,没有人在非阻塞模式下使用OCI。它有各种未记录的限制。一些OCI调用不可预测地将库切换回阻塞模式。另一方面,在多线程环境中使用OCI是非常安全的。无论您在何处处理它,因为它会阻止另一个位置或服务器中的另一个线程。您的cpu仍然浪费在不需要的地方(IO)。然后线程正在睡眠(等待DB的响应),没有浪费任何资源。实际上,线程空闲是我们当前的问题。根据非阻塞线程不能保持空闲的概念,它们必须被释放,以便能够处理其他请求。请参阅。看起来,slick提高了性能,并且在负载下具有恢复能力,但您的DB调用仍然被阻塞。顺便问一下,我可以在java项目中使用slick吗?