1. <small id="7qjag"></small>
    <small id="7qjag"></small>

  2. <p id="7qjag"></p>

    麻豆精品一卡二卡三卡 ,国产成人久久av免费高潮,热久久视久久精品18,成人无码看片在线观看免费 ,玩弄少妇肉体到高潮动态图,国产精品久久久久久影视不卡,国产成人无码免费看片软件,免费人成激情视频在线观看冫

    性能提升 200% !SpringBoot 虛擬線程來了

    來源: 程序員客棧2023-06-25 23:24:28
      

    在以往的項目中,我們面臨了這樣一種情況:我們收到了數(shù)千個認證請求。為了確保安全性,我們依靠第三方系統(tǒng)發(fā)送短信 OTP 進行驗證。然而,有時候第三方系統(tǒng)花費的時間比預期的要長,導致延遲。我們采用了每個請求一個線程的模型,這意味著許多線程處于等待狀態(tài),并且新請求都在隊列中。我們試圖通過微調(diào)線程數(shù)量來優(yōu)化性能,但當時我們希望有虛擬線程功能。當時 Java 中沒有虛擬線程的概念,這就是 Project Loom 的作用。

    虛擬線程
    什么是 Project Loom?

    什么是 Project Loom?這是 Oracle 的一個新項目,主要目標是顯著減少編寫、維護和觀察高吞吐量并發(fā)應用程序的工作量。換句話說,Project Loom 旨在支持和推進一個高吞吐量、輕量級的 Java 并發(fā)模型,因為傳統(tǒng)的操作系統(tǒng)線程(Java 并發(fā)模型的核心)有一些缺點,并且在計算上相當昂貴。反之,虛擬線程是更輕量級的線程,不與操作系統(tǒng)線程連接(由 JVM 管理)。這意味著虛擬線程是“每請求對應一個線程”編程的理想選擇,可以創(chuàng)建大量的虛擬線程,而不會降低吞吐量。開發(fā)人員可以使用現(xiàn)有的 JDK 工具和技術(shù)快速排除故障、調(diào)試和分析并發(fā)應用程序,在發(fā)布的 Spring Boot 3.1 中可用。作為 Spring 開發(fā)者,了解虛擬線程的概念并理解它們在開發(fā)過程中的重要性非常關(guān)鍵。

    如何使用虛擬線程Java 版本選擇

    Java 19 中引入的虛擬線程非常易于使用,筆者使用的 Mac M1 系列,這里選擇 Azul Zulu 發(fā)行版 20.30.11 版本[1]


    【資料圖】

    azul 20
    創(chuàng)建測試項目

    使用 Spring Initializer 或 IDE 創(chuàng)建項目。添加 spring-web 依賴項并添加元數(shù)據(jù)。(注意版本選擇 SpringBoot 3.1 ,Java 20)

    開啟虛擬線程功能
    默認報錯

    默認情況下, Java19 的虛擬線程功能是禁用狀態(tài)的,需要通過相關(guān) maven 編譯配置開啟。

    org.springframework.bootspring-boot-maven-pluginorg.apache.maven.pluginsmaven-compiler-plugin--enable-preview

    通過配置 bean 啟用虛擬線程

    @Bean?TomcatProtocolHandlerCustomizerthreadExecutorCustomizer()?{??return?protocolHandler?->protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());?}

    這個 Bean 是一個自定義的 Tomcat 協(xié)議處理器,負責處理 Spring Boot 應用程序中傳入的請求。這個自定義程序的目的是配置協(xié)議處理器使用的執(zhí)行器。

    在 threadExecutorCustomizer 方法內(nèi)部,使用 Lambda 表達式來自定義協(xié)議處理器。protocolHandler 參數(shù)代表正在自定義的 Tomcat 協(xié)議處理器的實例。

    在 Lambda 表達式中,調(diào)用 protocolHandler 對象的 setExecutor() 方法,用于為協(xié)議處理器設(shè)置執(zhí)行器。執(zhí)行器負責執(zhí)行任務,例如處理傳入的請求。

    在這種情況下,使用 Executors.newVirtualThreadPerTaskExecutor() 方法創(chuàng)建一個新的使用虛擬線程的執(zhí)行器。虛擬線程是輕量級線程,可以在單個操作系統(tǒng)線程中并發(fā)執(zhí)行任務。這意味著可以同時執(zhí)行多個任務,提高性能和資源利用率。

    增加測試端點

    @Slf4j@RequestMapping@RestControllerpublic?class?DemoController?{????@GetMapping("/")????public?String?demo()?{????????try?{????????????TimeUnit.MILLISECONDS.sleep(300);????????}?catch?(InterruptedException?e)?{????????????log.error(e.getMessage());????????}????????return?"Current?Thread?Name:?"?+?Thread.currentThread();????}}

    上手使用

    我們可以通過 Thread.currentThread() API 獲取當前請求線程的元信息,以判斷虛擬線程是否已經(jīng)正確開啟。

    性能測試對比100 線程測試不開啟虛擬線程
    吞吐量 300/s
    開啟虛擬線程
    吞吐量 300/s
    300 線程測試不開啟虛擬線程
    吞吐量 650/s
    開啟虛擬線程
    吞吐量 950/s
    500 線程測試不開啟虛擬線程
    吞吐量 650/s
    開啟虛擬線程
    吞吐量 1500/s
    圖表輸出總結(jié)

    通過以上我們發(fā)現(xiàn),在處理阻塞操作時,虛擬線程特別有益。隨著并發(fā)請求數(shù)量的增加,虛擬線程的性能提升越來越明顯。上述測試都是在未對 Spring Boot 項目進行調(diào)優(yōu)和優(yōu)化的情況下進行的。

    參考資料[1]

    Azul Zulu 發(fā)行版 20.30.11 版本: https://www.azul.com/downloads/?version=java-20-sts&os=macos&architecture=arm-64-bit&package=jdk#zulu

    關(guān)鍵詞:

    責任編輯:sdnew003

    相關(guān)新聞

    版權(quán)與免責聲明:

    1 本網(wǎng)注明“來源:×××”(非商業(yè)周刊網(wǎng))的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責,本網(wǎng)不承擔此類稿件侵權(quán)行為的連帶責任。

    2 在本網(wǎng)的新聞頁面或BBS上進行跟帖或發(fā)表言論者,文責自負。

    3 相關(guān)信息并未經(jīng)過本網(wǎng)站證實,不對您構(gòu)成任何投資建議,據(jù)此操作,風險自擔。

    4 如涉及作品內(nèi)容、版權(quán)等其它問題,請在30日內(nèi)同本網(wǎng)聯(lián)系。

    主站蜘蛛池模板: 精品少妇ay一区二区三区| 亚洲一区二区三区av天堂| 精品精品国产欧美在线小说区| 三男一女吃奶添下面视频| 国产乱子伦一区二区三区=| 欧美又大粗又爽又黄大片视频| 欧美高清性色生活片| 精品亚洲成a人在线看片| 亚洲色成人一区二区三区| 国产性夜夜春夜夜爽| 怡红院精品久久久久久久高清 | 国产精品日日做人人爱| 欧美成人天天综合在线| 激情综合色五月丁香六月亚洲| 久久精品国产曰本波多野结衣| 成人无码嫩草影院| 亚洲人成人77777网站| 蜜臀av色欲a片无码精品一区| 精品精品国产欧美在线小说区| 欧美69久成人做爰视频| 欧美精品色婷婷五月综合| 蜜臀av色欲a片无码精品一区| 国产精品一区二区含羞草| 国产精品好好热av在线观看| 国产精品欧美亚洲韩国日本久久| 久久久橹橹橹久久久久高清| 一二三四视频社区在线| 伊人久久大香线蕉av仙人 | 亚洲欧美日韩一区二区| 欧美丰满熟妇xxxx| 无码精品a∨在线观看十八禁| 国产偷国产偷亚洲清高孕妇| 精品国产一区二区三区吸毒| 久久久久77777人人人人人| 亚洲一区二区三区av天堂| 动漫精品视频一区二区三区| 亚洲最新无码成av人| 日欧一片内射va在线影院| 国产成人综合日韩精品无码不卡| 国产成人精品成人a在线观看| 高清人人天天夜夜曰狠狠狠狠|