深圳制作网站服务,wordpress付费下载插件,怎么做h5动态页面,开发一个小程序大概要多少钱高并发下的耗时操作高并发下#xff0c;就是请求在一个时间点比较多时#xff0c;很多写的请求打过来时#xff0c;你的服务器承受很大的压力#xff0c;当你的一个请求处理时间长时#xff0c;这些请求将会把你的服务器线程耗尽#xff0c;即你的主线程池里的线程将不会…高并发下的耗时操作高并发下就是请求在一个时间点比较多时很多写的请求打过来时你的服务器承受很大的压力当你的一个请求处理时间长时这些请求将会把你的服务器线程耗尽即你的主线程池里的线程将不会再有空闲状态的再打过来的请求将会是502了。请求流程图http1 http2 http3thread1 thread2 thread3解决方案使用DeferredResult来实现异步的操作当一个请求打过来时先把它放到一个队列时然后在后台有一个订阅者有相关主题的消息发过来时这个订阅者就去消费它这一步可以是分布式的比如一个秒杀场景当N多的请求打过来时有一些请求命中后它们进行写操作这时写操作压力很大1个请求可以要处理3秒对于高并发场景这是不能容许的因为你这样占用的服务器线程资源太长了很快你的服务器就没有可用的线程资源了这时就可以用到DeferredResult这处理。代码实现建立订单的接口只负责简单的校验和事件的发布/*** 异步建立高并发的订单.** return*/GetMapping(/create-order)public DeferredResult createOrder() {DeferredResult deferredResult new DeferredResult((long) 3000, error order);logger.info(发布建立订单的事件);applicationEventPublisher.publishEvent(deferredResult);return deferredResult;}异步的订单处理核心逻辑也是耗时的操作ComponentEnableAsyncpublic class OrderListener {static Logger logger LoggerFactory.getLogger(OrderListener.class);/*** 事实上它是一个订单队列的消费者在后台写订单本例使用简单的事件监听器实现异步处理的功能.** return*/EventListenerAsyncpublic String processOrder(DeferredResult deferredResult) throws InterruptedException {logger.info(处理订单并返回到对应的Http上下文);String order UUID.randomUUID().toString();Thread.sleep(2000);//假设处理数据需要5秒前端需要阻塞5秒但http主线程已经释放了比较适合IO密集型场合//当设置之后create-order将成功响应deferredResult.setResult(order);return order;}}测试结果当请求/create-order后服务器在处理2秒后返回结果而spring后台真正做的是线程1在事件发布后它成为空闲状态其它请求可以复用它当processOrder后台处理结果后spring又会用线程池中拿一个新的线程处理剩下的逻辑总结以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作具有一定的参考学习价值谢谢大家对脚本之家的支持。