aio-enhance v1.0.2 發布,Java AIO 內核增強類庫

2021-01-09 開源中國

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

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

一、項目背景

2.1 解決平臺兼容性問題。

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

2.2 修復官方 AIO 架構缺陷

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

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

2.3 優化 AIO 線程模型

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

二、適用場景

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

任何基於 Java AIO 實現的通信框架,如:smart-socket; 對高並發實時性有嚴苛要求; 多核CPU環境(至少4核以上)三、更新內容 優化:單次讀寫回調事件只觸發一次 IO 操作,減少read/write結果為0的頻次。 優化:將異步回調事件的遞歸計數器由 AtomicInteger 類型調整為 int 類型。 優化:簡化 Selector 的處理邏輯。 優化:簡化 SelectionKey.interestOps 的處理邏輯四、集成

步驟一:依賴

引入增強包:aio-enhance.jar。可以通過maven方式引入依賴,亦可直接下載 jar 包並導入classpath。

<dependency> <groupId>org.smartboot.aio</groupId> <artifactId>aio-enhance</artifactId> <version>1.0.2</version></dependency>

步驟二:啟動

可以通過硬編碼的方式設置系統屬性,如下:

System.setProperty("java.nio.channels.spi.AsynchronousChannelProvider", "org.smartboot.aio.EnhanceAsynchronousChannelProvider");

也可在 java 啟動命令行中設置,如下:

java -Djava.nio.channels.spi.AsynchronousChannelProvider=org.smartboot.aio.EnhanceAsynchronousChann

相關焦點

  • getty 發布,一個完全基於 java 實現的 aio 框架
    說說寫這個框架的原因:1、作者本人是一個碼農,比較喜歡研究技術,特別是網絡通訊。2、JDK1.7升級了NIO類庫,升級後的NIO類庫被稱為NIO 2.0。
  • Linux2.6內核驅動移植參考
    作者:晏渭川 隨著Linux2.6的發布,由於2.6內核做了教的改動,各個設備的驅動程序在不同程度上要 進行改寫。為了方便各位Linux愛好者我把自己整理的這分文檔share出來。該文當列舉 了2.6內核同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個 函數的用法。
  • ECharts-Java 類庫 2.2.6 版本發布
    ECharts - Java類庫當前版本2.2.6 本項目是一個供Java開發使用的ECharts的開發包,主要目的是方便在Java
  • PDFBox 2.0.6 發布,Java 的 PDF 處理類庫
    -3313] - Java 9 InaccessibleObjectException[PDFBOX-3318] - IllegalArgumentException in PDPageTree constructor: root cannot be null[PDFBOX-3347] - COSName parsing doesn't handle ISO-8859-1
  • Java開發人員必知必會的20種常用類庫和API
    雖然可以使用java.net包類,但是這和直接使用像Apache HttpClient和HttpCore等開源類庫比起來麻煩太多了。儘管JDK 9將開始HTTP 2.0,也對HTTP的支持做了優化,但是我還是強烈建議所有的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。
  • Python類庫Pillow實現圖片裁剪、縮放、效果增強等功能
    首先,表明一個問題,Pillow和PIL不是一個東西,Pillow 是一個對 PIL 友好的分支,兩者的作者是不同的,由於PIL的更新計劃太慢了,作者計劃一年更新兩次,有一些問題無法及時解決,導致Pillow的誕生,Pillow在2.0.0版本之後增加了對python3的支持,同時也修復了很多bug。
  • Quarkus 1.0 發布,Java 雲原生、容器優先框架
    Quarkus 1.0 發布了。Quarkus 是一個用於編寫 Java 應用的雲原生、容器優先框架。
  • 2018年阿里巴巴關於Java重要開源項目匯總
    地址:https://github.com/spring-cloud-incubator/spring-cloud-alibaba2. JDBC 連接池、監控組件 DruidDruid是一個 JDBC 組件。1.監控資料庫訪問性能。2.提供了一個高效、功能強大、可擴展性好的資料庫連接池。
  • Selenium v2.45.0 發布,支持 Firefox 36
    Selenium v2.45.0 發布,此版本現已提供下載:http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone
  • Apache Pulsar 2.6.1 版本正式發布:功能增強,新增 OAuth2 支持
    在 Apache Pulsar 2.6.0 版本發布後的 2 個月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式發布!
  • 三緯daVinci AiO全國首測_三緯 da Vinci 1.0 aio_3D...
    全球首款支持3D掃描、編輯和3D列印的三緯XYZprinting da Vinci 1.0 AiO有著類似的原理,它能否實現物品的完美複製,再現電影中的神奇場景呢?進入我們今天的評測。一體式機箱 3D掃描列印全封閉    三緯XYZprinting da Vinci 1.0 AiO 3D印表機仍然是封閉式的機箱結構,前倉門和頂蓋可以打開。
  • PPM v1.0 發布,企業通訊錄 Android APP
    PPM 企訊通 v1.0 第 1 個版本發布,雲端+Android 端快速構建企業雲通訊錄,歡迎大家免費下載使用~PPM Contact v1.0 是 PPM 企訊通於2013年
  • aelf Enterprise 1.0.0 Preview 1 版正式發布
    aelf Enterprise 0.9.2 版發布後,我們主要對項目的整體代碼進行了review,aelf Enterprise 1.0.0 preview 1 版主要修復了此次review過程中發現的問題。當前公開測試網代碼已更新至aelf v1.0.0 preview 1,目前aelf公開測試網已實現主網啟動所需的全部功能。
  • Java編程中基礎反射詳細解析
    2.1 反射基本信息java程序中許多對象在運行時會出現兩種類型:運行時類型和編譯時類型,例如Person p = new Student();這句代碼中p在編譯時類型為Person,運行時類型為2.1.2 Java反射機制的類庫支持在深入到反射機制之前,先探析一下反射機制的定義和應用。反射機制定義:Java反射機制是在運行狀態時,對於任意一個類,都能夠直到這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性。
  • Mars-java 2.1.5 發布 - OSCHINA - 中文開源技術交流社區
    Mars-java 2.1.5 主要變更如下: 新增了MarsValue註解,可以將yml文件裡的節點值注入到bean的屬性裡 新增了MarsTimer註解,一行註解即可完成定時任務 配置文件可隔離
  • jboot 2.0.9 發布,升級分布式事務 fescar 到 seata
    同時完美支持在 idea、eclipse 下多 maven 模塊,對java代碼、html、css、js 等資源文件進行熱加載,爽爽的開發。這個版本的發布,最大的變化是升級了 Fescar 到 Seata 最新版本,由於 Fescar 和 Seata 的包名修改,倘若您在使用 Jboot 的過程中,調用到了 Fescar 底層的 API,需要自行切換為 Seata。
  • 人工生命 v2.0.0 發布,給青蛙添個眼睛
    Frog | 人工生命https://gitee.com/drinkjava2/frog這是一個人工生命試驗項目,最終目標是創建「有自我意識表現」的模擬生命體