绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
硬核!无侵入式的 Java AIO 内核增强类库,并发性能提升不止一点点
2020-06-18 03:13:06

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 今天给大家带来的「硬菜」,如果你想知道它更详细的集成方法,那就点击下面的链接去项目主页看看吧:gitee.com/smartboot/a…


分享好友

分享这个小栈给你的朋友们,一起进步吧。

首席摸鱼官
创建时间:2020-06-22 17:27:10
为您提供优质的的开源项目以及行业信息。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • duanhao
    栈主

小栈成员

查看更多
  • zhanghongxi
  • H.U.C王子
  • 13717649136
  • huijinrutu
戳我,来吐槽~