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

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

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

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

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

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

    虛擬線程
    什么是 Project Loom?

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

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

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


    【資料圖】

    azul 20
    創建測試項目

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

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

    默認情況下, Java19 的虛擬線程功能是禁用狀態的,需要通過相關 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 協議處理器,負責處理 Spring Boot 應用程序中傳入的請求。這個自定義程序的目的是配置協議處理器使用的執行器。

    在 threadExecutorCustomizer 方法內部,使用 Lambda 表達式來自定義協議處理器。protocolHandler 參數代表正在自定義的 Tomcat 協議處理器的實例。

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

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

    增加測試端點

    @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 獲取當前請求線程的元信息,以判斷虛擬線程是否已經正確開啟。

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

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

    參考資料[1]

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

    關鍵詞:

    責任編輯:sdnew003

    相關新聞

    版權與免責聲明:

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

    2 在本網的新聞頁面或BBS上進行跟帖或發表言論者,文責自負。

    3 相關信息并未經過本網站證實,不對您構成任何投資建議,據此操作,風險自擔。

    4 如涉及作品內容、版權等其它問題,請在30日內同本網聯系。

    主站蜘蛛池模板: 久久国产色av免费看| 日本三线免费视频观看| 国产做国产爱免费视频| 亚洲狠狠婷婷综合久久久久图片| 亚洲另类欧美在线电影| 日本熟妇厨房bbw| 国产亚洲精品久久久久秋| 十八18禁国产精品www| 国产乱子伦精品无码码专区| 精品国产乱码久久久久久浪潮小说| 亚洲精品一区二区| 女人高潮内射99精品| 欧美国产日韩在线三区| 亚洲色偷偷偷综合网| 欧美精品亚洲精品日韩传电影| 欧美午夜成人片在线观看| 国产精品未满十八禁止观看| 少妇的肉体在线观看| 国产精品日日做人人爱| 2020国产成人精品影视 | 亚洲精品55夜色66夜色| 伊人蕉久中文字幕无码专区| 亚洲妇女无套内射精| 国产精品麻豆va在线播放| 99久久久无码国产麻豆| 亚洲欧美日本韩国| 无码纯肉动漫在线观看| 亚洲午夜久久久影院| 色五月丁香五月综合五月4438| 亚洲精品尤物av在线观看不卡| 国产国语熟妇视频在线观看| 久久久久青草线蕉亚洲| 成人午夜福利视频| 精品国产av一区二区果冻传媒 | 亚洲综合天堂av网站在线观看| 精品亚洲国产成人| 国产无套一区二区三区浪潮 | 午夜寂寞视频无码专区| 国产精品久久久久电影院| 草色噜噜噜av在线观看香蕉| 国产女人叫床高潮大片|