Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JDBC本质上是阻塞的情况下使用Play框架是否有益_Java_Oracle_Jdbc_Nonblocking_Playframework 2.5 - Fatal编程技术网

Java 在JDBC本质上是阻塞的情况下使用Play框架是否有益

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驱动程序中支持非阻塞调用(不幸的是,它基于轮询而不是回调或中断),甚至没有实验项目!这证明,人们还没有感觉到这种需要,这肯定是有原因的。当然,

我正在一个项目中使用Java的play框架。我们有很多并发用户,所以我们决定使用play重写整个项目,以从其非阻塞特性中获益,从而支持更多并发用户。该项目背后的数据库是Oracle,正如您所知,所有JDBC驱动程序都使用阻塞IO,除了。 我搜索了很多,得出的结论是,目前还没有使Oracle JDBC驱动程序无阻塞的解决方案。然而,Oracle在其本机OCI驱动程序中支持非阻塞调用(不幸的是,它基于轮询而不是回调或中断),甚至没有实验项目!这证明,人们还没有感觉到这种需要,这肯定是有原因的。当然,我找到了下面的链接,这是Java的一个链接,但Oracle没有


这就引出了我的问题。当我有一个针对Oracle的阻塞JDBC驱动程序时,使用Play framework真的有好处吗

使用后台线程进行JDBC连接,并通过消息与此线程通信


老实说,没有人在非阻塞模式下使用OCI。它有各种未记录的限制。一些OCI调用不可预测地将库切换回阻塞模式。另一方面,在多线程环境中使用OCI是非常安全的。

无论您在何处处理它,因为它会阻止另一个位置或服务器中的另一个线程。您的cpu仍然浪费在不需要的地方(IO)。然后线程正在睡眠(等待DB的响应),没有浪费任何资源。实际上,线程空闲是我们当前的问题。根据非阻塞线程不能保持空闲的概念,它们必须被释放,以便能够处理其他请求。请参阅。看起来,slick提高了性能,并且在负载下具有恢复能力,但您的DB调用仍然被阻塞。顺便问一下,我可以在java项目中使用slick吗?