日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot3虛擬線程 & 反應式(WebFlux) & 傳統(tǒng)Tomcat線程池性能對比

來源: 責編: 時間:2024-02-01 12:49:24 269觀看
導讀環(huán)境:SpringBoot3.2.1 + JDK211. 簡介從Spring Boot 3.2 支持虛擬線程。要使用虛擬線程,需要在 Java 21 上運行,并將屬性 spring.threads.virtual.enabled 設置為 true。啟用虛擬線程后,Tomcat 和 Jetty 將使用虛擬線程處

環(huán)境:SpringBoot3.2.1 + JDK219C128資訊網(wǎng)——每日最新資訊28at.com

1. 簡介

從Spring Boot 3.2 支持虛擬線程。要使用虛擬線程,需要在 Java 21 上運行,并將屬性 spring.threads.virtual.enabled 設置為 true。9C128資訊網(wǎng)——每日最新資訊28at.com

啟用虛擬線程后,Tomcat 和 Jetty 將使用虛擬線程處理請求。這意味著處理網(wǎng)絡請求的應用程序代碼(如控制器中的方法)將在虛擬線程上運行。9C128資訊網(wǎng)——每日最新資訊28at.com

啟用虛擬線程后,applicationTaskExecutor Bean 將成為配置為使用虛擬線程的 SimpleAsyncTaskExecutor。任何使用應用程序任務執(zhí)行器的地方,如調用 @Async 方法時的 @EnableAsync、Spring MVC 的異步請求處理和 Spring WebFlux 的阻塞執(zhí)行支持,現(xiàn)在都將使用虛擬線程。9C128資訊網(wǎng)——每日最新資訊28at.com

接下來將分別通過傳統(tǒng)阻塞Servlet技術、使用虛擬線程及使用反應式技術WebFlux來分別對比它們的性能。9C128資訊網(wǎng)——每日最新資訊28at.com

2. 性能對比

使用虛擬線程 & 傳統(tǒng)Servlet都使用下面的接口:9C128資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/task/default")public class TaskDefaultController {  @GetMapping("")  public Object index() throws Exception {    System.out.printf("before - %s%n", Thread.currentThread()) ;    TimeUnit.MILLISECONDS.sleep(100) ;    System.out.printf("after - %s%n", Thread.currentThread()) ;    return "task - default..." ;  }}

先測試下啟用虛擬線程執(zhí)行情況。9C128資訊網(wǎng)——每日最新資訊28at.com

配置:9C128資訊網(wǎng)——每日最新資訊28at.com

spring:  threads:    virtual:      enabled: true

控制臺輸出:9C128資訊網(wǎng)——每日最新資訊28at.com

before - VirtualThread[#42,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1after - VirtualThread[#42,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1

使用的是虛擬線程。9C128資訊網(wǎng)——每日最新資訊28at.com

2.1 傳統(tǒng)Tomcat線程池方式

配置線程池,如果不配置使用默認的最大線程200,整體的吞吐量將在2200作用。9C128資訊網(wǎng)——每日最新資訊28at.com

server:  tomcat:    threads:      min-spare: 500      max: 1000

初始啟動服務后,內存,CPU占用情況;默認啟動后線程個數(shù)與上面配置一致。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

使用jmeter測試,配置如下:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

使用500個線程,循環(huán)200次,整體做100000次壓測。后續(xù)的測試都會基于該配置進行。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

吞吐量為:46969C128資訊網(wǎng)——每日最新資訊28at.com

內存,CPU占用情況9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

2.2 使用虛擬線程

首先開啟虛擬線程9C128資訊網(wǎng)——每日最新資訊28at.com

spring:  threads:    virtual:      enabled: true

初始啟動服務后,內存,CPU占用情況9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

jmeter測試情況如下:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

吞吐量為:4677,與上面的阻塞Servlet基本差不多。但傳統(tǒng)Tomcat線程池方式需要更多的線程才能達到這一值。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

整個過程內存使用情況,虛擬線程要比傳統(tǒng)Tomcat線程池方式占用的多。9C128資訊網(wǎng)——每日最新資訊28at.com

JDK 的虛擬線程調度器是一個工作偷取 ForkJoinPool,以先進先出(FIFO)模式運行。調度器的并行性是指可用來調度虛擬線程的平臺線程數(shù)。默認情況下,它等于可用處理器的數(shù)量,但可以通過系統(tǒng)屬性 jdk.virtualThreadScheduler.parallelism 進行調整。ForkJoinPool 與普通池不同,普通池用于并行流的實現(xiàn),并以后進先出模式運行。9C128資訊網(wǎng)——每日最新資訊28at.com

調整數(shù)量再進行測試,設置JVM參數(shù)9C128資訊網(wǎng)——每日最新資訊28at.com

-Djdk.virtualThreadScheduler.parallelism=100 -Djdk.virtualThreadScheduler.maxPoolSize=100

設置100個平臺線程來調用虛擬線程。9C128資訊網(wǎng)——每日最新資訊28at.com

啟動服務后,線程,內存使用情況。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

jmeter測試結果如下:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

與調整前沒什么區(qū)別,反而是增加了應用的線程數(shù)量。9C128資訊網(wǎng)——每日最新資訊28at.com

2.3 反應式WebFlux

引入依賴

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-webflux</artifactId></dependency>

基于webflux,我們需要重新編寫接口測試。9C128資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/task/reactor")public class ReactorController {  @GetMapping("")  public Object index() throws Exception {    // 與上面2種方式不同,reactor方式則需要使用delayElement方式來模擬耗時任務    return Mono.just("task - reactor...").delayElement(Duration.ofMillis(100)) ;  }}

初始啟動服務后,內存,CPU占用情況。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

jmeter測試情況如下:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

吞吐量為:4659,與上面的測試結果基本一致。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

內存使用情況要比前面幾種方式占用都少。同時通過jmeter測試結果也能發(fā)現(xiàn),MAX請求的最大響應時間webflux是最小的,Std.Dev:所有請求響應時間的標準差也是最小的(該值越小,平均值越可靠)。9C128資訊網(wǎng)——每日最新資訊28at.com

根據(jù)測試結果,虛擬線程與webflux誰更勝一籌還不夠清晰,接下來我們結合數(shù)據(jù)庫操作進行測試。9C128資訊網(wǎng)——每日最新資訊28at.com

3. 基于數(shù)據(jù)庫測試

數(shù)據(jù)庫數(shù)據(jù)準備了600w的數(shù)據(jù)。9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

3.1 傳統(tǒng)Tomcat線程池方式

基于JPA進行數(shù)據(jù)庫的操作9C128資訊網(wǎng)——每日最新資訊28at.com

@Entity@Table(name = "t_user")public class User {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Integer uid ;  private String name ;}

Repository接口9C128資訊網(wǎng)——每日最新資訊28at.com

public interface UserRepository extends JpaRepository<User, Integer> {}

Controller測試接口9C128資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/users")public class UserController {  @Resource  private UserRepository ur ;    @GetMapping("/count")  public User count() {    return ur.findById(5800000).orElse(null) ;  }  }

測試結果:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

3.2 使用虛擬線程

記得開啟虛擬線程,測試結果如下:9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

3.3 反應式WebFlux

需要引入如下依賴9C128資訊網(wǎng)——每日最新資訊28at.com

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-r2dbc</artifactId></dependency><dependency>  <groupId>com.github.jasync-sql</groupId>  <artifactId>jasync-r2dbc-mysql</artifactId>  <version>2.1.24</version></dependency>

配置9C128資訊網(wǎng)——每日最新資訊28at.com

spring:  r2dbc:    url: r2dbc:mysql://localhost:3306/batch?serverZnotallow=GMT%2B8&sslMode=DISABLED    username: root    password: xxxooo    pool:      initialSize: 100      maxSize: 100      max-acquire-time: 30s       max-idle-time: 30m

實體定義,這里的注解與jpa不一樣9C128資訊網(wǎng)——每日最新資訊28at.com

@Table("t_user")public class User {    @Id  private Integer uid ;  private String name ;}

Repository定義9C128資訊網(wǎng)——每日最新資訊28at.com

public interface UserR2DBCRepository extends ReactiveCrudRepository<User, Integer> {}

Controller接口9C128資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/r2dbc")public class UserR2DBCController {  @Resource  private UserR2DBCRepository ur ;    @GetMapping("/users")  public Mono<User> count() {    return ur.findById(5800000)  ;  }  }

測試結果9C128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片9C128資訊網(wǎng)——每日最新資訊28at.com

根據(jù)測試結果來,webflux的整體性能遠遠高于虛擬線程及傳統(tǒng)tomcat線程池的方式。9C128資訊網(wǎng)——每日最新資訊28at.com

以上是本篇文章全部內容,希望對你有幫助。9C128資訊網(wǎng)——每日最新資訊28at.com

完畢!!!9C128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70431-0.htmlSpringBoot3虛擬線程 &amp; 反應式(WebFlux) &amp; 傳統(tǒng)Tomcat線程池性能對比

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++實現(xiàn)多功能計算器

下一篇: 一個用著方便的超強Python解釋器

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲欧美在线一区二区| 欧美在线精品免播放器视频| 精品不卡视频| 在线观看av一区| 亚洲精品美女91| 夜夜嗨网站十八久久| 亚洲欧美国产高清va在线播| 久久爱www| 欧美 日韩 国产一区二区在线视频 | 噜噜噜在线观看免费视频日韩| 亚洲精品中文字幕女同| 亚洲视频电影图片偷拍一区| 新狼窝色av性久久久久久| 久久er精品视频| 免费日韩视频| 国产精品高清在线| 国内精品免费在线观看| 亚洲日韩中文字幕在线播放| 亚洲欧美日本国产有色| 免费影视亚洲| 国产精品视频一二| 亚洲国产老妈| 午夜在线一区| 欧美精品偷拍| 国产亚洲午夜高清国产拍精品| 国产精品久久久爽爽爽麻豆色哟哟| 欧美精品在线播放| 国产午夜精品久久久| 亚洲精品在线视频观看| 性18欧美另类| 欧美日韩成人一区二区| 韩国成人精品a∨在线观看| 亚洲人成网站在线播| 欧美在线视频全部完| 欧美日韩在线观看一区二区| 韩国一区二区三区美女美女秀| 国产综合18久久久久久| 一区二区三区视频在线观看 | 欧美在线影院在线视频| 欧美日韩亚洲一区二区| 精品成人一区二区三区| 亚洲少妇自拍| 欧美成人免费全部观看天天性色| 欧美激情综合色综合啪啪| 国产欧美日韩一区| 99视频一区二区| 久久青草久久| 国产婷婷一区二区| 亚洲天堂成人在线视频| 欧美激情中文字幕乱码免费| 激情国产一区二区| 性色一区二区| 欧美性猛交xxxx乱大交退制版| 国产区欧美区日韩区| 夜夜嗨网站十八久久| 欧美va天堂在线| 韩国欧美国产1区| 欧美一区二区三区在线视频| 欧美视频一区二区三区…| 在线免费观看视频一区| 久久精品男女| 国产日韩视频| 亚洲欧美在线磁力| 国产精品久久久久久妇女6080| 亚洲综合色自拍一区| 欧美夫妇交换俱乐部在线观看| 欧美日韩综合在线免费观看| 亚洲人成人一区二区在线观看| 99精品欧美一区| 欧美大片一区二区| 亚洲国产导航| 蜜臀av一级做a爰片久久| 国一区二区在线观看| 欧美一区二区三区播放老司机| 久久一综合视频| 激情一区二区三区| 久久精品国产69国产精品亚洲 | 欧美日韩亚洲视频| 亚洲精品在线观看视频| 欧美激情视频一区二区三区在线播放 | 国产亚洲精品激情久久| 亚洲在线播放| 国产精品久久夜| 亚洲自啪免费| 国产伦精品一区二区| 亚洲欧美日韩精品久久久久| 国产精品久久久久久av下载红粉| 一区在线免费观看| 久久视频免费观看| 亚洲国产精品日韩| 欧美不卡在线| 亚洲精品三级| 欧美精品在线观看播放| 一本色道久久综合| 欧美午夜精品久久久久免费视| 亚洲二区免费| 欧美xx视频| 亚洲免费观看高清完整版在线观看熊 | 欧美精品日韩一本| 99re亚洲国产精品| 国产精品yjizz| 午夜精品久久| 国产午夜精品久久久| 久久嫩草精品久久久久| 亚洲国产日本| 欧美日韩亚洲一区二区三区四区 | 欧美日韩亚洲一区三区| 亚洲午夜久久久| 国产欧美一区二区三区久久人妖| 亚洲免费高清| 欧美日韩免费观看一区=区三区| 揄拍成人国产精品视频| 欧美成人精品在线视频| 99视频热这里只有精品免费| 国产精品久久久久久久app| 欧美一区二区三区喷汁尤物| 黄色成人片子| 欧美精品久久一区二区| 亚洲男人天堂2024| 国一区二区在线观看| 久久综合免费视频影院| 99精品欧美| 国产一区二区三区四区三区四| 亚洲一区精品视频| 国产一区二区三区高清在线观看 | 欧美精品一区二区三区久久久竹菊| 国内精品美女av在线播放| 蜜臀久久99精品久久久久久9 | 久久精品国产第一区二区三区| 国产精品久久一级| 久久精品国产亚洲a| 亚洲国产日韩欧美一区二区三区| 久久中文精品| 一本久道久久综合狠狠爱| 国产欧美日韩视频一区二区| 麻豆精品传媒视频| 亚洲午夜一区| 一区在线免费| 国产精品久久福利| 久久久午夜电影| 亚洲视频一二区| 在线观看欧美日韩国产| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 亚洲一区二区免费在线| 激情五月综合色婷婷一区二区| 巨胸喷奶水www久久久免费动漫| 国产在线视频欧美| 欧美激情第1页| 久久不射网站| 亚洲视频一二| 91久久国产综合久久| 国产性做久久久久久| 欧美日韩国产在线播放网站| 久久久午夜电影| 亚洲字幕一区二区| 亚洲国产另类精品专区| 国产精品入口| 欧美精品播放| 久久男人资源视频| 亚洲欧美激情一区二区| 日韩视频免费观看| 一区二区三区在线看| 国产精品欧美一区二区三区奶水| 欧美在线播放高清精品| 99视频热这里只有精品免费| 激情欧美日韩| 国产欧美精品一区二区三区介绍| 久久不射2019中文字幕| 亚洲手机视频| 最新国产乱人伦偷精品免费网站 | 国产精品网站视频| 欧美日韩第一区日日骚| 快she精品国产999| 久久国产精品黑丝| 亚洲欧美春色| 亚洲天堂网在线观看| 日韩亚洲一区二区| 91久久精品一区二区别| 精品91视频| 国产亚洲一区二区三区| 欧美日韩在线播放三区四区| 美女图片一区二区| 久久久久久综合网天天| 午夜视频在线观看一区| 亚洲综合色丁香婷婷六月图片| 国产亚洲欧美日韩精品| 国产精品久久一卡二卡| 欧美视频在线观看| 欧美国产日韩精品| 欧美freesex交免费视频| 久久亚洲国产精品日日av夜夜| 日韩一区二区精品视频| 亚洲国产日韩综合一区| 在线观看91久久久久久| 在线观看一区二区精品视频| 国产在线观看一区| 国产综合色产在线精品| 国产日韩欧美麻豆| 国产日韩在线看片| 国产亚洲成av人在线观看导航| 欧美激情精品久久久久久| 欧美成年视频| 欧美精品亚洲一区二区在线播放| 亚洲欧美日韩一区在线|