java webasynctask_高并发场景下的Web异步任务WebAsyncTask

本文介绍了在高并发场景下,如何使用Spring MVC的WebAsyncTask进行Web请求的异步处理,以提高服务器吞吐量。通过示例展示了WebAsyncTask的用法,包括同步与异步调用的对比,以及如何定制异步任务的超时时间、执行回调等特性。
摘要由CSDN通过智能技术生成

同步与异步

Web同步调用

浏览器/客户端发起一个请求,Web服务器开启一个线程来处理请求,当请求处理完成以后,Web服务器返回处理结果,这就是同步调用。

7a08becb5f02bd77cd1c92da663ac915.png

在普通的场景下,如果服务器负载不大,并且后端服务也给力,同步调用并没有什么问题。

但在高并发场景下,请求服务端的线程总数是有限的,如果某个线程一直处于阻塞状态,就会影响系统的吞吐量。

f2baf22b926c885761fa01b984f9fb34.png

Web异步调用

所谓异步请求,就是在当前线程调用以后直接返回,继续处理其他任务,当前调用处理成功以后再通过一个回调线程来处理返回结果。

举个做家务的例子类比一下:之前你烧火做饭,就只能守在旁边添柴加火,等饭做好了才能去摆放餐具;现在你买了一个电饭锅,当你向电饭锅添加了做饭必备的材料并下达了做饭的指令以后,电饭锅就自己开始工作了,你就可以抽身去摆放餐具了,等饭做好,电饭锅会主动蜂鸣通知你来取饭,这样做饭的效率就提高了很多,你的并行处理能力直线上升。

Spring MVC 3.2 以后的版本开始引入了基于 Servlet 3 的异步请求处理,可以实现如下的异步调用。

27a38293e9d3d4b1abb3aba4c39a1405.png

Web请求同步与异步调用对比

下面通过一个简单的同步和异步对比的例子,来快速演示WebAsyncTask的用法以及同步与异步调用的差异。

两个任务

首先定义一个Controller,并添加了两个方法来代表一次Web请求要进行的两个任务,这两个任务分别要执行3秒。

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestControlle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值