Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 具有异步支持的基于连接池的web服务器与基于事件循环的web服务器_Java_Vert.x_Event Loop_Servlet 3.1 - Fatal编程技术网

Java 具有异步支持的基于连接池的web服务器与基于事件循环的web服务器

Java 具有异步支持的基于连接池的web服务器与基于事件循环的web服务器,java,vert.x,event-loop,servlet-3.1,Java,Vert.x,Event Loop,Servlet 3.1,我正在学习Vertx和它的ecosysteme,首先我学习了事件循环,这个概念对我来说非常好 但由于Servlet3.1,我们可以在基于JAVA的服务器中使用异步支持 我使用的是Spring,它的新类名为deferredresult,它可以从tomcat获取线程,从执行器线程池向线程提供逻辑执行,使tomcat的线程可以自由处理另一个请求,然后当它完成时返回响应 在事件循环中,所有阻塞调用都应该由worker vertx完成,概念完全相同,您为阻塞调用提供一个线程,并在任务完成时提供回调事件循环

我正在学习Vertx和它的ecosysteme,首先我学习了事件循环,这个概念对我来说非常好

但由于Servlet3.1,我们可以在基于JAVA的服务器中使用异步支持

我使用的是Spring,它的新类名为
deferredresult
,它可以从tomcat获取线程,从执行器线程池向线程提供逻辑执行,使tomcat的线程可以自由处理另一个请求,然后当它完成时返回响应

在事件循环中,所有阻塞调用都应该由worker vertx完成,概念完全相同,您为阻塞调用提供一个线程,并在任务完成时提供回调事件循环执行回调并返回响应

这些概念看起来和我很相似


也许我遗漏了一些东西,但是这些概念之间有什么区别呢?

基于线程池的web服务器使用工作线程作为用户请求的主要执行上下文。在开发Spring或JavaEE应用程序时,需要调用大量的阻塞代码(JDBC、Hibernate、JAX-RS客户机等等)。 然后添加Servlet3.1AsyncAPI以解决长轮询等问题(如果所有工作线程都在等待,则无法再处理请求)

然而,基于事件循环的系统(Vert.x,Node)是为了用单个线程处理大量用户请求而构建的。通常将它们与非阻塞数据库驱动程序或web客户端结合使用。 这是一个很好的解决方案(线程迁移、热缓存等更少)。但是,您不能阻止事件循环,否则无法再处理事件。 在理想情况下,您将只使用非阻塞库,但现实情况是,许多Java库都不是,我们不应该抛弃这一遗留问题。作为一种变通方法,Vert.x提供了一种将阻塞代码执行卸载到工作池的方法


我希望这能澄清一点,并表明除了相似性之外,用例是不同的。

基于线程池的web服务器使用工作线程作为用户请求的主要执行上下文。在开发Spring或JavaEE应用程序时,需要调用大量的阻塞代码(JDBC、Hibernate、JAX-RS客户机等等)。 然后添加Servlet3.1AsyncAPI以解决长轮询等问题(如果所有工作线程都在等待,则无法再处理请求)

然而,基于事件循环的系统(Vert.x,Node)是为了用单个线程处理大量用户请求而构建的。通常将它们与非阻塞数据库驱动程序或web客户端结合使用。 这是一个很好的解决方案(线程迁移、热缓存等更少)。但是,您不能阻止事件循环,否则无法再处理事件。 在理想情况下,您将只使用非阻塞库,但现实情况是,许多Java库都不是,我们不应该抛弃这一遗留问题。作为一种变通方法,Vert.x提供了一种将阻塞代码执行卸载到工作池的方法

我希望这能澄清一点,并表明除了相似性之外,用例是不同的