国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

響應式編程又變天了?看JDK21虛擬線程如何顛覆!

開發 前端
虛擬線程 和 StructuredTaskScope 的組合將非常強大。虛擬線程使阻塞不再是一個問題,而 StructuredTaskScope 將為我們提供更高級別的類,以直觀的方式處理異步編程。很難看到為什么還需要 Completable Futures。

命令式風格編程一直深受開發者喜愛,如 if-then-else、while 循環、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程被阻塞時間遠超過必要時間。

1 同步阻塞設計

1.1 同步阻塞設計的線程圖

為了便于你理解,讓我們看一個典型的企業用例請求:

  • 從DB獲取數據
  • 從 Web 服務獲取數據
  • 合并結果并將最終合并的結果發送回用戶

在像 Tomcat 這樣的應用服務器中,一個平臺線程將專用于用戶請求,該線程將繼續調用從數據庫獲取數據的代碼(調用 FetchDataFromDB),然后調用從 Web 服務獲取數據的代碼(調用 FetchDataFromService),然后繼續合并并將數據發送給用戶(調用 SendDataToUser)。

如下圖,將執行線程從上到下表示為一個垂直箭頭:

  • 綠色是執行的 CPU 部分
  • 紅色是線程等待數據的時間

大多企業應用都是 IO 綁定的,因此線程在大多時間內實際是浪費資源。

圖片圖片

1.2 評估

Java 中,平臺線程是昂貴資源,因為默認,每個平臺線程消耗 1MB 棧內存。即 JVM 中運行的平臺線程數量有上限。因此,若一個平臺線程專用于用戶請求,對高并發用戶的應用程序,就帶來問題。傳統解決方案是創建一個具有最大線程數的線程池,并根據需要水平或垂直擴展應用程序:

  • 垂直擴展意味著向容器或 VM 添加更多資源
  • 水平擴展則意味著添加應用程序的更多實例

2 異步阻塞設計

2.1 異步阻塞設計線程圖

為了提高性能,可用異步模型,并行運行一些串行任務。如若假設數據庫和 Web 服務的獲取任務可以并行運行,那么它們可以在各自的平臺線程中執行。

圖片圖片

用戶請求線程啟動兩個線程:

  • 一個用于處理從數據庫獲取數據
  • 另一個用于從 Web 服務獲取數據
  • 然后,它將阻塞以獲取兩者結果,然后繼續合并并將數據發送給用戶

在 Java 可通過向 Executor Service 提交 Callable 或 Runnable 任務并使用 Java Futures 來實現。

2.2 評估

這將提高性能,因為兩個數據獲取是并行執行的。但是,即使在大多數時間內可能會有性能提升,但是在短時間內,平臺線程的數量現在從 1 增加到 3。從可擴展性看,在那段時間內情況更壞。

3 響應式樣式設計

響應式編程設計就是為解決這問題。

3.1 部分響應式設計線程圖

在于昂貴的平臺線程在阻塞操作期間浪費大部分時間。隨 Servlet 3.0 和 3.1 引入,Servlet 線程在發送 HTTP 數據回用戶時無需保持活動狀態,這為更巧妙編程打開解決線程阻塞的大門。Java 8 CompletableFuture類可在其中創建響應式管道。這種開發風格思想是為該用例指定一個執行管道,而非執行用例本身。

用戶請求線程只需指定用例的 CompletableFuture 管道(或任何其他管道),并在盡可能短的時間內將其釋放回線程池(因為無需再保持活動狀態以向用戶發送數據)。

圖片圖片

此時,用戶請求線程創建一個運行 3 個活動的管道:

  • 先并行運行 FetchDataFromService、FetchDataFromDB
  • 再運行 Send2User

但創建此管道后,用戶請求線程將被簡單釋放回線程池。大大減輕 JVM 負擔,因為現在它有一個較少的線程要處理。一旦數據提取線程完成其執行,數據將被發送給用戶。

評估

但這只是部分解決問題,因為從 Web 服務、DB獲取數據的實際活動仍是在它們各自的平臺線程中阻塞。這帶來問題:SE須確保他從管道中生成的任務不是阻塞的。這很難做到,因為它是手動完成的,并且肯定是錯誤的,因為在編譯時或運行時它不會被標記為警告或錯誤。

4 完全響應式樣式設計

如何才能表現更好?達到更高標準 OKR 呢?為使該設計完全響應式,須以非阻塞方式獲取DB、Web 服務的數據。

作為 JDK 7 的一部分,NIO(New IO) 為非阻塞 IO 打開大門。Java 所有基于 IO 類和方法都有非阻塞版本了。如socket讀/寫、文件讀/寫、鎖 API 等。須使用這些類/方法的非阻塞版本或支持 NIO 的庫來進行數據的獲取。

4.1 完全響應式樣式設計線程圖

圖片圖片

每個獲取數據的 Fetch Data 中,發出請求的線程和獲取數據的線程不同,如:

  • 從 Web 服務檢索數據的 HTTP GET 請求將在一個線程上運行
  • 而最終處理檢索到的數據的線程將在另一個線程上運行

這就是完全響應式,它解決了關鍵問題:IO 操作期間不阻塞。在這里使用平臺線程的唯一時間是在 CPU 操作期間,而不是在 IO 操作期間。在平臺線程的執行部分已看不到任何紅色部分。

這種開發風格能實現應用程序高可擴展性。然而,解決方案過復雜。創建響應式管道、調試它們及想象它們的執行很困難。所以很正常,這種開發風格沒有流行開來,只有頂尖的開發者才對此愛不釋手。Spring Boot 專門用于響應式風格編程的完整開發技術棧即 Spring WebFlux,它使用 Project Reactor 庫提供了對DB、Web 服務等的非阻塞行為。

5 虛擬線程

還有響應式設計的其他替代方案嗎?當然了!如今 Java 21 的發布,Oracle 推出備受期待的 Virtual Threads 功能。

平臺線程問題是在阻塞操作期間,實際變得無用。平臺線程基本是os線程的簡易包裝,畢竟os線程是昂貴的。

而虛擬線程是 JVM 中 Thread 類的實現,它是輕量級的。最終歸結為以下幾點 — 當使用虛擬線程進行代碼執行時,它將在 CPU 操作期間使用平臺線程(稱為載體線程),并且在遇到 IO 操作時將載體線程釋放。

JVM如何知道何時遇到 IO 操作?

虛擬線程中運行時,JVM 將自動切換到使用 IO 操作的非阻塞版本。這種更改已在大多核心 Java 類庫中為大多數 IO 操作進行了痛苦修改。當代碼遇到 IO 操作,載體線程將被釋放,并且在該 IO 的數據可用時,虛擬線程將被重新安排在另一個載體線程上處理數據。即在虛擬線程中阻塞不是問題,因為底層的載體線程被釋放了。

SE現在可選擇使用虛擬線程進行用戶請求。即SE可繼續使用與以前相同的命令式開發風格,同時獲得使用響應式管道時獲得的可擴展性優勢(但沒有復雜性)。

具有虛擬線程的同步阻塞線程圖

這種方式在同步阻塞設計中的情況(注意,阻塞不是一個問題)。

圖片圖片

用戶請求線程是虛擬線程(藍色垂直箭頭)。線程上的紅色不再是問題,因為阻塞操作期間,底層的載體線程將被釋放,從而實現與使用響應式框架相同的可擴展性優勢。

6 虛擬線程和異步阻塞設計

6.1 異步阻塞設計中的虛擬線程

阻塞在此也不再是問題。前面提到可用 Java Futures 實現,我們確實有這樣做的選擇。但Java 21引入 StructuredTaskScope 和 Subtask ,以處理結構化異步行為。

圖片圖片

虛擬線程 和 StructuredTaskScope 的組合將非常強大。虛擬線程使阻塞不再是一個問題,而 StructuredTaskScope 將為我們提供更高級別的類,以直觀的方式處理異步編程。很難看到為什么還需要 Completable Futures。

虛擬線程 V.S 響應式框架

  • 可繼續使用命令式風格開發
  • 無需創建復雜的響應式管道
  • 無需在代碼中直接使用非阻塞 IO
  • 更易編碼、調試和理解

7 總結

隨著 Java 21 中 虛擬線程 引入,虛擬線程在阻塞狀態下不再是問題。開發人員:

  • 無需創建復雜的響應式風格管道
  • 且無需在代碼中直接使用非阻塞 IO

即可創建高度可擴展的應用程序。替代方案是使用 Java 21 中引入的 虛擬線程 與 Java Futures 或 Structured Concurrency(Java 21 中的預覽功能) 類的組合。

參考:

  • 編程嚴選網
責任編輯:武曉燕 來源: JavaEdge
相關推薦

2024-06-06 16:15:00

2023-10-20 08:12:00

JDK21線程池配置

2023-11-03 18:23:34

虛擬線程服務器

2023-06-06 07:45:30

JDK21Java并發編程

2020-07-30 07:47:32

互聯網

2023-10-09 08:18:08

域值Java 21結構化

2025-05-06 01:14:00

系統編程響應式

2013-01-06 13:41:05

筆記本

2022-03-30 07:32:10

JDK8異步編程

2023-12-20 14:35:37

Java虛擬線程

2021-07-14 13:12:51

2023-10-23 19:51:11

Java線程

2024-11-19 06:00:00

2010-04-01 08:46:57

CentOS系統

2023-09-20 09:07:01

Java 21開發工具包

2024-10-07 08:40:56

Spring應用程序Java

2022-06-16 13:08:30

Combine響應式編程訂閱

2022-07-15 08:16:56

Stream函數式編程

2023-09-26 12:16:29

JDK 21Java

2010-06-09 11:55:44

嵌入式開發Windows 7微軟
點贊
收藏

51CTO技術棧公眾號

免费理论片在线观看播放老| 亚洲电影有码| 久久国产麻豆精品| 色阁综合伊人av| 国产色a在线观看| 免费观看在线综合色| 欧美精品福利在线| 性欧美高清come| 亚洲国产视频一区| 热99这里只有精品| 99re国产精品| 日韩美女在线播放| 成人亚洲视频| 欧美二区在线观看| 香港日本韩国三级| 26uuu国产电影一区二区| 日韩激情精品| 亚洲黄页一区| 国产三区精品| 亚洲一区免费在线观看| 日本网站在线免费观看视频| 欧美有码在线视频| 麻豆tv入口在线看| 先锋影音久久| 日韩人妻精品一区二区三区| 亚洲激情国产| 国产成人极品视频| 日本福利午夜视频在线| 亚洲欧美偷拍卡通变态| 男人天堂午夜在线| 久久久久久综合网天天| 亚洲色图网站| 国产精品久久久| 国产一区二区三区的电影 | 日韩精品成人一区二区在线| 日本欧美精品久久久| 欧美系列电影免费观看| 91精品一区二区三区在线观看| 91福利免费在线| 欧美不卡一二三| 中文字幕 91| 亚洲精品视频免费看| aa在线视频| 美日韩精品免费视频| 黄色在线免费观看网站| 国产成人久久| 久久影视中文粉嫩av| 精品一区二区三区视频在线观看 | 成人激情文学综合网| 日韩在线黄色| 中文字幕日韩一区二区三区| 国产专区欧美精品| 182在线视频观看| 日韩欧美在线123| av资源久久| a级网站在线观看| 日韩电影一区二区三区四区| 97精品一区二区三区| 欧美特黄不卡| 欧美多人爱爱视频网站| 久久夜色精品国产噜噜av小说| 欧美精品激情blacked18| 成人av资源网址| 日av在线播放中文不卡| 99精品美女| 日韩av黄色| 91色p视频在线| 欧美日韩久久| 精品无码国模私拍视频| 国产亚洲精品久| 一级毛片电影| 亚洲一区二区不卡免费| 亚洲欧美卡通另类91av| 久久五月天婷婷| 国产一区999| 男人添女人下面免费视频| 午夜欧美一区二区三区在线播放 | 国产精品22p| 国产一区在线播放| 视频在线观看国产精品| 国产自产在线视频| 一区二区三区欧美亚洲| www视频在线免费观看| 最近免费中文字幕视频2019| 少妇精品久久久一区二区| 蜜桃日韩视频| 国产网站一区二区三区| 色播色播色播色播色播在线| 亚洲精品久久久久中文字幕欢迎你| 激情五月综合婷婷| 国产成人看片| 9l国产精品久久久久麻豆| 夜色资源站国产www在线视频| 日韩一区二区三区在线| 懂色av色香蕉一区二区蜜桃| 99精品国产一区二区| 成人午夜电影久久影院| 在线播放的av| 在线播放精品一区二区三区 | 成人网18免费网站在线| 91久久精品一区二区二区| 欧美三区四区| 国产精品久久久久91| 精品亚洲国内自在自线福利| gogo高清免费视频| 亚洲国内精品在线| 精品国产乱码久久久| 国产专区在线视频| 色哟哟国产精品| 五月亚洲婷婷| 色视频一区二区三区| 亚洲另类中文字| 最近高清中文在线字幕在线观看1| 亲子乱一区二区三区电影| 麻豆国产91在线播放| 在线视频1区| 欧美国产精品va在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 九七伦理97伦理| 在线日韩精品视频| 亚洲激情另类| 中文字幕第12页| xxxxx成人.com| 国产精品入口66mio| 天天爱天天做色综合| 亚洲欧洲在线播放| 香蕉成人久久| 日韩一区二区三区中文字幕| 97精品免费视频| 成人av动漫在线| av漫画网站在线观看| 黄色一区三区| 黄网站色欧美视频| 欧美电影在线观看免费| 大j8黑人w巨大888a片| 精品国产一区二区三区四区四| 久久免费大视频| 免费羞羞视频| 欧美黑人视频一区| 99久久精品情趣| 综合在线影院| 天天爽天天狠久久久| 欧美一区二区三区免费| 欧美在线亚洲| 在线国产一区二区三区| 青草青草久热精品视频在线网站 | 日韩精品久久久久久福利| 亚洲精品二区三区| 最新版sss视频在线| 欧美一区二区色| 国产日韩欧美一区二区三区乱码 | 久久狠狠婷婷| 超碰免费在线观看| 成人黄色短视频在线观看| 亚洲免费在线观看视频| 久久久久影视| 人人做人人爽| 日本精品视频在线观看| 日韩一区中文字幕| 五月综合久久| 男女小视频在线观看| 国产精品99久久久久久人| 有码一区二区三区| 成人在线免费观看视频| 四虎精品成人影院观看地址| 国产日韩av在线| 欧美视频在线观看免费| 亚洲欧美文学| 日本免费在线观看| 日韩av一区二区三区美女毛片| 精品精品国产高清一毛片一天堂| 日韩成人精品在线观看| 日韩脚交footjobhd| 久艹视频在线免费观看| 另类天堂视频在线观看| 国产女同互慰高潮91漫画| 欧美成人午夜77777| 午夜视频在线观看韩国| 精品视频免费观看| 精品精品欲导航| 国产成人亚洲综合a∨猫咪| 伊人久久大香| 国产成人午夜精品| 亚洲伊人久久综合| 日韩视频123| 精品午夜一区二区三区在线观看| 姬川优奈av一区二区在线电影| 欧洲av无码放荡人妇网站| 亚洲老司机av| 亚洲视频自拍偷拍| 最近2019年手机中文字幕| 欧美性猛交xxxx乱大交退制版 | 91精品国产福利| 欧美性做爰猛烈叫床潮| 亚洲日本在线观看视频| 日韩视频免费在线播放| 国产日本欧美一区二区三区| 欧美丰满美乳xxx高潮www| 国产精品一区二区久久不卡| 91久久精品无嫩草影院|