Nivelle 开拓视野冲破艰险看见世界 身临其境贴近彼此感受生活

异步并发

2017-10-29
nivelle

异步并发

在开发应用系统过程中,通过异步并发并不能使得响应更快,更多的是为了提升吞吐量,对请求更细粒度到的控制,或者通过依赖服务并发调用降低服务响应时间.

异步是针对CPU和IO的,当IO没有就绪时就要让出CPU来处理其他任务,这才是异步.

异步Future

线程池配合Future实现,但是阻塞主请求线程,高并发时依然会造成线程数过多,CPU上线文切换.通过Future可以并发发出N个请求,然后等待最慢的一个返回,总响应时间为最慢的一个请求返回的用时.

异步Callback

通过回调机制实现,即首先发出网络请求,当网络返回时回调相关方法,如HttpAsynClien使用基于NIO的异步i/o模型实现,它实现了Reactor模式,摒弃阻塞i/o模型 one thread per connection,采用线程池分发事件通知,从而支撑大量并发连接.这种机制并不能提升性能,而是为了支撑大量并发连接或者提升吞吐量.

异步编排CompletableFuture

JDK 8 CompletableFuture提供了新的异步编程思路,可以对多个异步处理进行编排,实现更复杂的异步处理.其内部使用ForkJoinPool实现异步处理.使用CompletableFuture可以把回调方式的实现转化为同步调用实现.CompletableFuture提供了50多个API,可以满足各种所需场景的异步处理编排.

异步Web服务实现

image

Servlet容器接收到请求之后,Tomcat需要先解析请求体,然后通过异步Servlet将请求交给异步线程池来完成业务处理,Tomcat线程释放回容器.通过异步机制可以提升Tomcat容器的吞吐量.


相关文章

上一篇 原生类型

下一篇 jvmGC回收算法

评论