返回顶部
首页 > 资讯 > 精选 >Springboot如何实现高并发下耗时操作
  • 928
分享到

Springboot如何实现高并发下耗时操作

2023-06-02 14:06:26 928人浏览 薄情痞子
摘要

小编给大家分享一下SpringBoot如何实现高并发下耗时操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!高并发下的耗时操作高并发下,就是请求在一个时间点比较多

小编给大家分享一下SpringBoot如何实现高并发下耗时操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

并发下的耗时操作

高并发下,就是请求在一个时间点比较多时,很多写的请求打过来时,你的服务器承受很大的压力,当你的一个请求处理时间长时,这些请求将会把你的服务器线程耗尽,即你的主线程池里的线程将不会再有空闲状态的,再打过来的请求,将会是502了。加q群:478052716 免费领取(Java架构资料,视频资料,BATJ面试资料)

请求流程图

Http1 http2 http3thread1 thread2 thread3

解决方案

使用 DeferredResult 来实现异步的操作,当一个请求打过来时,先把它放到一个队列时,然后在后台有一个订阅者,有相关主题的消息发过来时,这个订阅者就去消费它,这一步可以是分布式的,比如一个秒杀场景,当N多的请求打过来时,有一些请求命中后,它们进行写操作,这时写操作压力很大,1个请求可以要处理3秒,对于高并发场景这是不能容许的,因为你这样占用的服务器线程资源太长了,很快你的服务器就没有可用的线程资源了,这时就可以用到DeferredResult这处理。

代码实现

建立订单的接口,只负责简单的校验和事件的发布

 @GetMapping("/create-order") public DeferredResult<Object> createOrder() { DeferredResult<Object> deferredResult = new DeferredResult<>((long) 3000, "error order"); logger.info("发布建立订单的事件"); applicationEventPublisher.publishEvent(deferredResult); return deferredResult; }

异步的订单处理核心逻辑,也是耗时的操作

@Component@EnableAsyncpublic class OrderListener { static Logger logger = LoggerFactory.getLogger(OrderListener.class);  @EventListener @Async public String processOrder(DeferredResult<Object> 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又会用线程池中拿一个新的线程处理剩下的逻辑!

以上是“Springboot如何实现高并发下耗时操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Springboot如何实现高并发下耗时操作

本文链接: https://lsjlt.com/news/230278.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot如何实现高并发下耗时操作
    小编给大家分享一下Springboot如何实现高并发下耗时操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!高并发下的耗时操作高并发下,就是请求在一个时间点比较多...
    99+
    2023-06-02
  • Laravel 接口开发中,如何使用 Go 实现高并发操作?
    在 Laravel 接口开发中,我们经常需要处理高并发请求。为了满足这种需求,我们可以使用 Go 实现并发操作。本文将介绍如何在 Laravel 中使用 Go 实现高并发操作,并演示一些代码示例。 一、安装 Go 首先,我们需要在本地安装...
    99+
    2023-08-17
    laravel linux 接口
  • Python中的路径API如何实现高效的并发操作?
    Python是一种强大的编程语言,广泛应用于各个领域。在编写Python应用程序时,路径操作是一个非常常见的任务。Python提供了许多模块和API来处理路径操作,但是在并发环境下,路径操作可能会成为性能瓶颈。本文将介绍如何使用Python...
    99+
    2023-06-29
    并发 path api
  • Shell命令如何帮助Java实现高效的并发操作?
    Shell命令如何帮助Java实现高效的并发操作? Java是一门面向对象的高级编程语言,也是应用广泛的编程语言之一。在Java中,多线程编程是实现高效并发操作的重要手段。然而,多线程编程存在着一些问题,例如:线程安全性、同步、死锁等问题。...
    99+
    2023-08-28
    numy shell 并发
  • 如何在Python中使用numpy实现高效的并发操作?
    Python是一门非常流行的编程语言,它在科学计算和数据分析领域非常受欢迎。而numpy则是Python中用于数值计算的重要库。在处理大规模数据时,numpy提供了高效的数组操作和数学函数,但是在并发计算方面,numpy的性能并不是最优的。...
    99+
    2023-11-07
    并发 关键字 numpy
  • Java中接口如何实现并发操作?
    在Java中,接口是一种常用的抽象数据类型,它定义了一组规范,而不是具体的实现。接口可以被类实现,这样类就可以实现接口定义的规范。在Java中,接口也可以用于实现并发操作。本文将介绍Java中接口如何实现并发操作,以及如何使用演示代码来展...
    99+
    2023-10-18
    接口 并发 数组
  • 如何在Java中使用容器实现高效的并发操作?
    Java作为一种流行的编程语言,其在并发编程方面的支持非常强大。其中,容器的使用是实现高效并发操作的关键之一。本文将介绍如何在Java中使用容器实现高效的并发操作。 一、什么是容器? 在Java中,容器是一种用于存储和管理对象的数据结构。它...
    99+
    2023-06-21
    容器 并发 数据类型
  • Go 语言中的 Shell 容器:如何实现高效并发操作?
    在计算机科学领域中,容器是一种轻量级的虚拟化技术,它可以使应用程序在独立的运行环境中进行部署和运行。而 Shell 容器则是一种特殊的容器,它可以在不需要启动整个操作系统的情况下执行单个命令或一组命令。 在本文中,我们将探讨如何使用 Go...
    99+
    2023-07-29
    shell 容器 并发
  • golang如何实现高并发
    Golang通过Goroutine和Channel来实现高并发。 Goroutine是Golang中轻量级的线程,可以同时执行多个G...
    99+
    2023-10-23
    golang
  • php如何实现高并发
    这篇文章将为大家详细讲解有关php如何实现高并发,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 高并发实现 绪论 在现代网络环境中,高并发处理已成为 PHP 应用程序面临的关键挑战。优化 PHP 应...
    99+
    2024-04-02
    协程 异步I/O 消息队列 缓存 数据库优化
  • redis如何实现高并发
    redis通过以下机制实现高并发:单线程事件循环、i/o多路复用、无锁数据结构、惰性删除、管道化、客户端连接池以及可扩展到集群模式。 Redis如何实现高并发? Redis作为一种流行...
    99+
    2024-06-12
    redis 并发访问
  • PHP中如何实现对象的并发操作?
    在PHP中,对象的并发操作是一个非常重要的主题,因为它可以提高应用程序的性能和响应速度。在本文中,我们将讨论如何在PHP中实现对象的并发操作。 首先,让我们先了解一下PHP中的并发操作是什么意思。简单来说,并发操作是指多个线程或进程同时执行...
    99+
    2023-10-22
    对象 并发 shell
  • 如何使用 ASP 函数实现并发操作?
    ASP(Active Server Pages)是一种广泛使用的服务器端脚本语言,用于创建动态网站和Web应用程序。ASP函数是一种内置的函数,用于执行各种操作,例如处理字符串、日期、数组、文件等。在本文中,我们将探讨如何使用ASP函数实现...
    99+
    2023-11-10
    函数 并发 numy
  • 如何使用Shell命令在Java中实现高效的并发操作?
    Shell命令在Java中实现高效的并发操作是一种非常流行的方法。它可以大大提高程序的性能和效率,尤其是在处理大规模数据时。本文将介绍如何使用Shell命令在Java中实现高效的并发操作,并且通过演示代码来帮助读者更好地理解。 一、Shel...
    99+
    2023-08-28
    numy shell 并发
  • PHP并发编程面试题:如何实现高效的数组操作?
    在PHP并发编程中,数组操作是非常常见的。但是,当我们需要处理大量数据时,如何实现高效的数组操作就成了一个非常重要的问题。在本篇文章中,我们将介绍一些方法来优化PHP数组操作的性能。 使用foreach循环 在PHP中,我们通常使用f...
    99+
    2023-08-16
    并发 数组 面试
  • 你知道如何在Linux环境下使用PHP和Laravel实现高效的并发操作吗?
    在当今的互联网时代,高效的并发操作已经成为了必不可少的技能。对于开发者而言,如何在Linux环境下使用PHP和Laravel实现高效的并发操作是一个非常关键的问题。在本文中,我们将会详细介绍如何实现这一目标。 一、什么是并发操作? 在计算机...
    99+
    2023-07-08
    linux laravel 并发
  • 《PHP容器并发编程实现指南:如何实现高效的多线程操作?》
    PHP容器并发编程实现指南:如何实现高效的多线程操作? 随着互联网的飞速发展,PHP已经成为了一种非常流行的编程语言。不过,PHP在处理大量数据时,往往会出现性能瓶颈。为了解决这个问题,我们可以通过并发编程来提高PHP应用的性能。本文将介绍...
    99+
    2023-10-02
    并发 教程 容器
  • 如何在PHP中使用分布式函数实现高效的并发操作?
    在当今互联网时代,高并发操作已经成为了每个Web开发人员都需要考虑的问题。无论是从用户体验还是从服务器性能角度出发,都需要实现高效的并发操作。在PHP中,使用分布式函数可以实现高效的并发操作。本文将介绍如何在PHP中使用分布式函数实现高效的...
    99+
    2023-10-06
    分布式 函数 并发
  • 如何在Java中使用接口和数组实现高效的并发操作?
    在Java中,实现并发操作一直是一个重要的话题。而要实现高效的并发操作,接口和数组是两个非常重要的概念。本文将介绍如何在Java中使用接口和数组实现高效的并发操作,并且给出演示代码。 首先,让我们来了解一下接口的概念。在Java中,接口是...
    99+
    2023-10-18
    接口 并发 数组
  • 如何同时处理Python日志和并发操作?
    在编写Python程序时,我们经常需要同时处理日志和并发操作。这两个方面都是非常重要的,因为日志可以帮助我们追踪程序的运行情况,而并发操作可以提高程序的执行效率。在本文中,我们将介绍如何同时处理Python日志和并发操作,并提供一些演示代...
    99+
    2023-09-14
    日志 并发 npm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作