硬核!無侵入式的 Java AIO 內核增強類庫,併發性能提升不止一點點

AIO(異步非阻塞IO)是 Java 中常見到的一種網絡 IO 之一,JDK1.7升級了 NIO 類庫,升級後的NIO 類庫被稱爲NIO2.0,也就是AIO。NIO2.0引入了新的異步通道的概念,並提供了異步文件通道和異步套接字通道的實現。

今天 Gitee 介紹的開源項目就是一款增強 AIO 架構的「硬菜」,具體有多「硬」,大家接着往下看。

 

項目名稱:aio-enhance

項目作者:smartboot

開源許可協議:Apache-2.0

 

項目地址:https://gitee.com/smartboot/aio-enhance

 

 

項目簡介

aio_enhance(音譯:硬漢) 是一款無侵入式的 Java AIO 內核增強類庫(注意:這不是一款通信框架),解決原生 AIO 架構設計中存在的缺陷,提供更高效、更穩定的 通信能力。

aio_enhance 採用了 NIO 技術實現了一套全新的異步線程模型,兼容完整的 Java AIO 接口。用戶可自由選擇 Java 原生提供的,或者 aio_enhance 增強的 AIO 實現,架構如下圖:

 

項目背景

解決平臺兼容性問題

Java 原生 AIO 在 Mac 操作系統下存在兼容性問題,進行性能壓測會偶發性的系統崩潰。

修復官方 AIO 架構缺陷

Java 原生 AIO 在底層架構設計上存在缺陷(參考:Java AIO通信模型)。多核 CPU 環境下處理高併發請求,會引發比較嚴重的鎖競爭現象,以致無法充分發揮機器性能。

普通4核機器競爭壓力不大,AIO 的運行表現實測優於NIO。但隨着 CPU 核數的增加,AIO 的性能優勢逐漸下降。

優化 AIO 線程模型

Java AIO 相較於 NIO 多了一層異步線程模型,極大降低了開發人員的編程難度。但是通信過程中的 accept、connect、read、write 等事件都是複用同一組線程資源,容易造成讀寫回調進入死鎖狀態。 AIO通信框架在設計上需要特別關注這一點,但如果引入 aio-enhance 則無此顧慮。

 

適用場景

如果您符合以下幾個條件,aio-enhance 會是一個不錯的選擇。

  • 基於 Java AIO 實現的通信框架,如:smart-socket
  • 對高併發實時性有嚴苛要求
  • 多核CPU環境(至少4核以上)

 

性能對比

爲了更加客觀的展現 Java 原生 AIO、NIO 以及通過 aio-enhance增強後的 AIO 的性能表現,我們選擇 smart-socket 和 netty 在 TFB 上的測試結果做了比較。

  • aio:smart-socket
  • nio:netty
  • aio-enhance: smart-socket

四核 CPU

28 核 CPU

 

總結

雖說在實驗場景下 Java AIO 的表現不如 NIO,但是異步非阻塞的設計思想是值得被肯定的。況且在現實場景中,這點性能差別很容易就被業務邏輯所抹平,大家無需去計較孰優孰劣,適合自己的就是最好的選擇。如今有了 aio-enhance 做備選,Java AIO本身設計上的缺陷也就沒那麼重要了。

 

以上便是 Gitee 今天給大家帶來的「硬菜」,如果你想知道它更詳細的集成方法,那就點擊下面的鏈接去項目主頁看看吧:https://gitee.com/smartboot/aio-enhance

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章