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

Alm*_*zak 1 java event-loop vert.x servlet-3.1

我正在学习Vertx和它的ecosysteme,首先我学习了Event循环,这个概念对我来说真的很好.

但是自从Servlet 3.1我们可以在基于JAVA的服务器中使用异步支持.

我正在使用Spring,它的新类命名deferredresult可以从tomcat获取线程,从执行程序线程池中执行逻辑,从而使tomcat中的线程可以自由处理另一个请求,然后在它完成返回响应时.

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

这些概念看起来与我非常相似.

也许我想念一些东西,但这些概念有什么区别?

tse*_*ont 5

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

但是,基于事件循环的系统(Vert.x,Node)可以通过单个线程处理大量用户请求.通常将它们与非阻塞数据库驱动程序或Web客户端组合使用.它是一个非常强大的模型(更少的线程迁移,温暖的缓存,等等).但是你不能阻止事件循环或者你不能再处理事件了.在一个理想的世界中,你只会使用非阻塞库,但现实是许多Java库都没有,我们不应该只是抛弃这些遗留物.作为一种解决方法,Vert.x提供了一种将阻止代码执行卸载到工作池的方法.

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