我正在学习有关vertx及其生态系统的知识,首先我了解了事件循环,这个概念对我来说真的很好。
,但是由于Servlet 3.1我们可以在基于Java的服务器中使用异步支持。
我正在使用Spring,它是名为deferredresult
的新类,它可以从Tomcat中获取线程,将逻辑执行到executor thread pool to thread thread pool,从tomcat免费从tomcat免费处理其他请求,然后在完成返回响应时。
在事件循环中,所有阻止呼叫都应由Worker Vertx完成,该概念是绝对相同的,您给出了阻止调用的线程,并在任务完成事件循环执行回调和返回响应后提供回调。
这些概念看起来与我非常相似。
也许我想念一些东西,但是这些概念有什么区别?
基于线程池的Web服务器使用工作线程作为用户请求的主要执行上下文。当您开发弹簧或Javaee应用程序时,您会调用大量阻止代码(JDBC,Hibernate,Jax-Rs客户端,...等(。然后添加了Servlet 3.1异步API来解决诸如长民意调查之类的问题(如果您的所有工作线程都在等待,您将无法再处理请求(。
基于事件循环的系统(vert.x,node(是为了处理带有单个线程的许多用户请求的构建。通常,您将它们与非阻止数据库驱动程序或Web客户端相结合。这是一个非常强大的模型(较少的线程迁移,温暖的缓存等(。但是您绝不能阻止事件循环,否则您将无法再处理事件。在理想的世界中,您只会使用非阻止图书馆,但现实是许多Java库不是,我们不应该只是抛弃这种遗产。作为解决方法,Vert.X提供了一种将阻止代码执行到工作池的方法。
我希望这可以澄清一下,并表明,除了相似之处,用例不同。