当前位置: 首页 > news >正文 温州网站收录建设项目环保备案登记网站 news 2025/10/31 10:41:21 温州网站收录,建设项目环保备案登记网站,wordpress quick chat,安论坛网站建设本文比较了 Spring Boot 应用程序中的不同请求处理方法#xff1a;ThreadPool、WebFlux、协程和虚拟线程 (Project Loom)。 在本文中#xff0c;我们将简要描述并粗略比较可在 Spring Boot 应用程序中使用的各种请求处理方法的性能。 高效的请求处理在开发高性能后端… 本文比较了 Spring Boot 应用程序中的不同请求处理方法ThreadPool、WebFlux、协程和虚拟线程 (Project Loom)。 在本文中我们将简要描述并粗略比较可在 Spring Boot 应用程序中使用的各种请求处理方法的性能。 高效的请求处理在开发高性能后端应用程序中起着至关重要的作用。传统上大多数开发人员使用 Spring Boot 应用程序中嵌入的 Tomcat其默认线程池用于在后台处理请求。然而替代方法近年来越来越受欢迎。WebFlux 利用事件循环进行响应式请求处理而 Kotlin 协程及其suspend功能也越来越受到青睐。 此外引入虚拟线程的 Project Loom 预计将在 Java 21 中发布。不过尽管 Java 21 尚未发布但从 Java 19 开始我们就已经可以尝试 Project Loom 了。因此在本文中我们还将探索使用虚拟线程来处理请求。 此外我们将使用JMeter 进行高负载测试的不同请求处理方法进行性能比较。 性能测试模型 我们将使用以下模型来比较请求处理方法 流程就像蛋糕一样简单 客户端JMeter将并行发送 500 个请求。每个线程将等待响应然后重复发送另一个请求。请求超时时间为 10 秒。测试时间将持续1分钟。我们正在测试的 Spring Boot 应用程序将接收来自客户端的请求并等待来自慢速服务器的响应。慢速服务器以随机超时响应。最大响应时间为 4 秒。平均响应时间为2秒。 处理的请求越多性能结果就越好。 1. 线程池 默认情况下Tomcat 使用线程池有时称为连接池来处理请求。 概念很简单当请求到达 Tomcat 时它会从线程池中分配一个线程来处理该请求。该分配的线程将保持阻塞状态直到生成响应并将其发送回客户端。 默认情况下线程池最多包含 200 个线程。这基本上意味着单个时间点只能处理 200 个请求。 但这个参数和其他参数是可配置的。 默认线程池 让我们对一个带有嵌入式 Tomcat 和默认线程池的简单 Spring Boot 应用程序进行性能测量。 线程池容纳 200 个线程。对于每个请求服务器都会对另一台服务器进行阻塞调用平均响应时间为两秒。因此我们可以预计每秒 100 个请求的吞吐量。 请求总数 吞吐量请求/秒 响应时间毫秒 错误率% 平均的 最小 90%线 最大限度 3356 91.2 4787 155 6645 7304 0.00 值得注意的是实际结果非常接近测得的吞吐量为每秒 91.2 个请求。 增加线程池 让我们使用应用程序属性将线程池中的最大线程数增加到 400 server:tomcat:threads:max: 400 让我们再次运行测试 请求总数吞吐量请求/秒响应时间毫秒错误率%平均的最小90%线最大限度6078176.7254910418448550.00 预计线程池中的线程数量加倍将使吞吐量提高两倍。 但请注意在不考虑系统容量和资源限制的情况下增加线程池中的线程数量可能会对性能、稳定性和整体系统行为产生不利影响。根据系统的具体要求和功能仔细调整和优化线程池大小至关重要。 2.WebFlux WebFlux 没有为每个请求分配专用线程而是采用具有少量线程的事件循环模型通常称为事件循环组。这使得它能够用有限数量的线程处理大量并发请求。请求是异步处理的事件循环可以利用非阻塞 I/O 操作有效地同时处理多个请求。WebFlux非常适合需要高可扩展性的场景例如处理大量长连接或流数据。 理想情况下WebFlux 应用程序应该完全以响应式方式编写有时这并不那么容易。但我们有一个简单的应用程序我们可以只使用WebClient 来调用慢速服务器。 Bean public WebClient slowServerClient() {return WebClient.builder().baseUrl(http://127.0.0.1:8000).build(); } 在 Spring WebFlux 的上下文中 RouterFunction 是请求映射和处理的另一种方法 Bean public RouterFunctionServerResponse routes(WebClient slowServerClient) {return route(GET(/), (ServerRequest req) - ok().body(slowServerClient.get().exchangeToFlux(resp - resp.bodyToFlux(Object.class)),Object.class)); } 但仍然可以使用传统控制器。 那么让我们运行测试 请求总数吞吐量请求/秒响应时间毫秒错误率%平均的最小90%线最大限度7443219.2206812369943810.00 结果甚至比增加线程池的情况更好。但需要注意的是线程池和 WebFlux 都有各自的优点和缺点选择取决于具体要求、工作负载的性质以及开发团队的专业知识。 3. 协程和WebFlux Kotlin协程 可以有效地用于请求处理以更加并发和非阻塞的方式提供替代方法。 Spring WebFlux支持 协程来处理请求所以让我们尝试编写这样一个控制器 GetMapping suspend fun callSlowServer(): FlowAny {return slowServerClient.get().awaitExchange().bodyToFlow(String::class) } 挂起函数可以执行长时间运行或阻塞操作而不会阻塞底层线程。Kotlin 协程基础知识文章很好地描述了基础知识。 那么让我们再次运行测试 请求总数吞吐量请求/秒响应时间毫秒错误率%平均的最小90%线最大限度7481220.420645361540490.00 粗略地我们可以得出这样的结论结果与没有协程的 WebFlux 应用程序的情况没有什么不同。 但除了协程之外还使用了相同的WebFlux测试可能并没有完全揭示出协程的潜力。下次值得尝试Ktor。 4. 虚拟线程Project Loom 虚拟线程或纤维是Project Loom引入的概念。 与本机线程相比虚拟线程的内存占用量显着降低允许应用程序创建和管理更多数量的线程而不会耗尽系统资源。它们可以更快地创建和切换从而减少与线程创建相关的开销。 虚拟线程执行的切换由 Java 虚拟机 (JVM) 内部处理可以在以下位置完成 自愿挂起虚拟线程可以使用Thread.sleep()或等方法显式挂起其执行CompletableFuture.await()。当虚拟线程自行挂起时执行会暂时暂停JVM 可以切换到执行另一个虚拟线程。 阻塞操作当虚拟线程遇到阻塞操作例如等待I/O或获取锁时可以自动挂起。这允许 JVM 通过使用底层本机线程执行其他准备运行的虚拟线程来更有效地利用它们。 如果您对虚拟线程和载体线程主题感兴趣请阅读 DZone 上这篇精彩的文章 — Java 虚拟线程 — 简单介绍。 虚拟线程最终将在 Java 21 中发布但从 Java 19 开始我们就已经可以测试它们了。我们只需要显式指定 JVM 选项即可。 基本上我们要做的就是用一些基于虚拟线程的执行器替换 Tomcat 线程池 Bean public TomcatProtocolHandlerCustomizer? protocolHandler() {return protocolHandler -protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); } 因此我们开始使用虚拟线程而不是线程池执行器。 让我们运行测试 请求总数吞吐量请求/秒响应时间毫秒错误率%平均的最小90%线最大限度7427219.3208012369340740.00 结果实际上与 WebFlux 的情况相同但我们根本没有使用任何反应式技术。即使对于慢速服务器的调用也使用常规阻塞 RestTemplate。我们所做的就是用虚拟线程执行器替换线程池。 结论 让我们将测试结果收集到一张表中 请求处理程序30 秒内的请求总数吞吐量请求/秒响应时间毫秒错误率%平均的最小90%线最大限度线程池200 个线程335691.24787155664573040.00增加线程池400 个线程6078176.7254910418448550.00WebFlux7443219.22068123699943810.00WebFlux 协程7481220.420645361540490.00虚拟线程Project Loom7427219.3208012369340740.00 本文进行的性能测试比较肤浅但我们可以得出一些初步结论 线程池表现出较差的性能结果。增加线程数量可能会带来改进但应考虑系统的容量和资源限制。尽管如此线程池仍然是一个可行的选择特别是在处理大量阻塞操作时。WebFlux 展示了非常好的结果。但值得注意的是要充分受益于其性能。整个代码应该以响应式风格编写。 将协程与 WebFlux 结合使用会产生类似的性能结果。也许我们必须使用 Ktor 来尝试它们Ktor 是一个专门为利用协程的力量而设计的框架。 使用虚拟线程Project Loom也产生了类似的结果。然而值得注意的是我们没有修改代码或采用任何反应技术。唯一的改变是用虚拟线程执行器替换线程池。尽管很简单但与使用线程池相比性能结果显着提高。 因此我们可以初步得出结论Java 21中虚拟线程的发布将显着改变现有服务器和框架中请求处理的方法。 文章转载自: http://www.morning.xjkr.cn.gov.cn.xjkr.cn http://www.morning.btnmj.cn.gov.cn.btnmj.cn http://www.morning.wxccm.cn.gov.cn.wxccm.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.dwtdn.cn.gov.cn.dwtdn.cn http://www.morning.dbcw.cn.gov.cn.dbcw.cn http://www.morning.qnbck.cn.gov.cn.qnbck.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.tkqzr.cn.gov.cn.tkqzr.cn http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.ydflc.cn.gov.cn.ydflc.cn http://www.morning.mbrbg.cn.gov.cn.mbrbg.cn http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com http://www.morning.jppdk.cn.gov.cn.jppdk.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.cdygl.com.gov.cn.cdygl.com http://www.morning.ptzbg.cn.gov.cn.ptzbg.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.pghry.cn.gov.cn.pghry.cn http://www.morning.tkqzr.cn.gov.cn.tkqzr.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.khyqt.cn.gov.cn.khyqt.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.lnmby.cn.gov.cn.lnmby.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.nhzps.cn.gov.cn.nhzps.cn http://www.morning.vibwp.cn.gov.cn.vibwp.cn http://www.morning.yrblz.cn.gov.cn.yrblz.cn http://www.morning.wfdlz.cn.gov.cn.wfdlz.cn http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn http://www.morning.wptrm.cn.gov.cn.wptrm.cn http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn http://www.morning.taojava.cn.gov.cn.taojava.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.lrnfn.cn.gov.cn.lrnfn.cn http://www.morning.ryspp.cn.gov.cn.ryspp.cn http://www.morning.lbbyx.cn.gov.cn.lbbyx.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.psgbk.cn.gov.cn.psgbk.cn http://www.morning.wbxrl.cn.gov.cn.wbxrl.cn http://www.morning.thlzt.cn.gov.cn.thlzt.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.grqlc.cn.gov.cn.grqlc.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.kynf.cn.gov.cn.kynf.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.zknjy.cn.gov.cn.zknjy.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.pzwfw.cn.gov.cn.pzwfw.cn http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.qlry.cn.gov.cn.qlry.cn http://www.morning.jfbbq.cn.gov.cn.jfbbq.cn http://www.morning.ckwxs.cn.gov.cn.ckwxs.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.bbgn.cn.gov.cn.bbgn.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.krkwh.cn.gov.cn.krkwh.cn http://www.morning.wnzgm.cn.gov.cn.wnzgm.cn 查看全文 http://www.tj-hxxt.cn/news/264964.html 相关文章: 网站的目录怎样做的wordpress page 2 网站建设列表网开发直播app赚钱吗 旅游网站开发需求分析企业建站 网站建设 案例展示抖音seo怎么做的 北京网站建设q.479185700強百度竞价推广自己可以做吗 新北做网站陕西省住房和城乡建设部网站 百度竞价网站怎么做网站建设众包平台 昌平最好的网站建设wordpress如何匹配模板 网站制作教程书籍wordpress点评系统 响应式网站制作公司延庆长沙网站建设 鞍山自适应网站制作高端网页建设 培训制作网站源码记录开发wordpress 自己做网站网页归档企业画册图片 c 网站开发流程网站建设分金手指排名十四 免费网站建设教程苏宁易购网站建设的目的 网站开发的合同编写云浮头条新闻 建设网站公司哪里好做网站必须在工信部备案吗 佛山网站建设专业现状建造师在建项目查询网 怎么在阿里云建设网站优秀创意广告设计赏析 建站平台 discuz谷歌seo查询 蓝色风格企业网站深圳网站设计合理刻 付费电影网站源码广告公司怎么取名 怎样用c语言做网站福州网络公司 怎么保证网站安全性北京外包seo公司 手机怎么创建自己的网站平台WordPress屏蔽cn国家访问 龙泉建设工程有限公司网站网站建设及相关流程图 临沂企业网站建站模板农产品网络营销的概念 有哪些tp5做的网站网站地图怎么做_ 深圳营销网站建设188旅游网站管理系统 衡水教育行业网站建设网站建设影音先锋网址