`
春花秋月何时了
  • 浏览: 41623 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java AIO 简介

阅读更多

前言

从JDK 7版本开始,Java新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个NIO了),包含了众多性能和功能上的改进,其中最重要的部分,就是对异步io的支持,称为Java AIO(asynchronous IO)。

因为AIO的实施需充分调用OS参与,IO需要操作系统支持、并发也同样需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。

 

BIO,NIO,AIO 三种IO处理模型

BIO:也即是传统的同步阻塞IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,即使该连接不做任何事,或者使用频率很少都会造成服务器的线程开销,当线程数达到操作系统的限制,可能会延迟或者拒绝新的连接请求。其read方法自己阻塞自己等待有数据可读为止,所以说是同步阻塞。

NIO:JDK1.4提出的同步非阻塞IO,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO基于Reactor模式,其select底层调用操作系统的select/poll模型(Linux2.6采用epoll)不断的轮询,直到有数据可操作为止,这其实就是一种同步IO,当发现有数据操作之后进行的IO操作将不会被阻塞,即是非阻塞IO。另外在这种模型下,从通知应用程序有数据可读,到read调用把外部数据加载至内核空间,然后再从内核空间拷贝至用户空间需要一定时间间隔,这也会降低整体数据吞吐量。

AIO:JDK1.7提出的异步非阻塞IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。与NIO不同,AIO基于Proactor模式当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。在这种情况下,操作系统会负责将可读取的数据从内核空间转移至用户空间之后,才主动通知应用程序,应用程序不但不需要不停的轮询,并且数据的读取过程也更加快捷。

 

BIO、NIO、AIO适用场景:

  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持

 

AIO实现原理

我们知道在Linux 2.6以后,java NIO的实现,Linux是通过epoll来实现的,Windows是通过较低效的select/poll实现的,这点可以通过jdk的源代码发现。而对于AIO,在windows上是通过IOCP实现的,在Linux上还是通过epoll来实现的。

AIO新增的API主要有如下:

  • AsynchronousSocketChannel
  • AsynchronousServerSocketChannel
  • AsynchronousFileChannel
  • AsynchronousDatagramChannel
  • CompletionHandler

异步channel API提供了两种方式监控/控制异步操作(connect,accept, read,write等)。第一种方式是返回java.util.concurrent.Future对象, 检查Future的状态可以得到操作是否完成还是失败,还是进行中, future.get阻塞当前进程。
第二种方式为操作提供一个回调参数java.nio.channels.CompletionHandler,这个回调类包含completed,failed两个方法。
channel的每个I/O操作都为这两种方式提供了相应的方法, 你可以根据自己的需要选择合适的方式编程。

 

参考文章:http://www.ibm.com/developerworks/cn/linux/l-async/

 

分享到:
评论

相关推荐

    基于java的开发源码-smart-socket 开源的Java AIO框架.zip

    基于java的开发源码-smart-socket 开源的Java AIO框架.zip 基于java的开发源码-smart-socket 开源的Java AIO框架.zip 基于java的开发源码-smart-socket 开源的Java AIO框架.zip 基于java的开发源码-smart-socket ...

    Java AIO 实例(转)

    Java AIO,全称为Asynchronous Input/Output,是Java NIO的一个扩展,它引入了非阻塞的异步I/O操作,使得Java开发者能够更高效地处理I/O事件。AIO在Java 7中被引入,相较于传统的IO模型,它的优势在于能够提高并发...

    高性能的java AIO通信框架 物联网参考

    Java AIO,全称为Asynchronous Input/Output,是Java NIO的一个扩展,它引入了非阻塞的异步I/O模型,使得在处理高并发、大数据传输时性能更优,尤其适合于物联网(IoT)场景,其中设备之间的通信效率至关重要。...

    JAVA 7 AIO 学习笔记

    JAVA 7 AIO 学习笔记,很详细的讲解

    基于javaaio实现,开源、简单、易用、低延迟、高性能百万级java mqtt client组件和java mqtt br服务

    Java AIO(Asynchronous Input/Output)是一种在Java中实现非阻塞I/O的方式,它在JDK 7中引入,提供了异步读写操作,能够显著提高高并发场景下的性能。基于Java AIO实现的MQTT客户端和broker服务,如标题和描述中...

    基于java aio 的RPC 远程调用框架.zip

    Java AIO,全称为Asynchronous Input/Output,也被称为NIO 2,是Java平台提供的一种非阻塞I/O模型,旨在改善Java的I/O性能,特别是在处理大量并发连接时。RPC(Remote Procedure Call)是一种分布式计算技术,允许...

    基于Java AIO接口的jnet框架设计源码

    该项目是一款基于Java AIO接口的轻量级jnet框架设计源码,包含115个文件,其中包括111个Java源文件、2个XML配置文件、1个Git忽略文件以及1个Markdown文档。该框架旨在简化Java AIO编程的复杂性,不提供额外抽象,...

    基于Java Aio的高性能MQTT客户端与Broker服务设计源码

    该项目是一个开源、高性能的Java MQTT客户端与Broker服务设计源码,基于Java Aio实现,旨在提供简单、易用且低延迟的百万级客户端组件和Broker服务。项目包含289个文件,其中226个Java源文件、17个Markdown文档、13...

    Java视频教程 Java游戏服务器端开发 Netty NIO AIO Mina视频教程

    [第1节] Java NIO流-简介和概述.flv [第2节] Java NIO流-缓冲区.flv [第3节] Java NIO流-缓冲区操作.flv [第4节] JavaNIO流-通道1.flv [第5节] Java NIO流-通道2.flv [第6节] Java NIO流-socket通道操作.flv ...

    smart-socket 开源的Java AIO框架.zip

    《深入解析Smart-Socket:基于Java AIO的高效网络通信框架》 Smart-Socket是一款开源的Java异步非阻塞I/O(AIO)框架,它以高效、稳定和易于扩展为特点,广泛应用于高性能、高并发的网络通信场景。在Java的世界里,...

    java IO NIO AIO.xmind

    涉及到java io, nio, aio相关知识点,学习过程中的一些总结,持续更新中,xmind 格式

    基于java AIO实现的RPC调用框架.zip

    Java AIO,全称为Asynchronous Input/Output,是Java NIO的一个扩展,它提供了一种异步非阻塞的I/O操作方式,特别是在处理高并发、低延迟的网络通信场景时,AIO具有显著的优势。在RPC(Remote Procedure Call)框架...

    基于java aio实现,开源、简单、易用、低延迟、高性能百万级java mqtt client组件和java mqtt服务

    java mqtt 基于 java aio 实现,开源、简单、易用、低延迟、高性能百万级 java mqtt client 组件和 java mqtt broker 服务

    java BIO NIO AIO

    Java BIO NIO AIO Java BIO、NIO、AIO是 Java 中的三种 I/O 模式,每种模式都有其特点和应用场景。下面对每种模式进行详细解释。 Java BIO Java BIO( Blocking I/O)是一种同步阻塞式的 I/O 模式,即服务器实现...

    smart-socket,一种高性能的Java AIO框架.zip

    《深入解析Smart-Socket:Java AIO框架的高性能实践》 Smart-Socket,作为一个高性能的Java AIO(Asynchronous I/O)框架,是Java开发者在处理高并发、低延迟网络通信场景下的利器。AIO,又称非阻塞I/O,相较于传统...

    smart-socket 开源的Java AIO框架.rar

    smart-socket是一款国产开源的 Java AIO 通信框架,支持 TCP、UDP、SSL/TLS 。 高性能、高并发、低延迟、低能耗 代码量极少,可读性强。核心代码不到 1500 行,工程结构、包层次清晰。 学习门槛低,二次开发只需...

    一站式学习Java网络编程 全面理解BIO:NIO:AIO1

    全面理解 Java 网络编程 - BIO、NIO、AIO 本课程旨在帮助学生全面理解 Java 网络编程中的 BIO、NIO、AIO 三剑客,掌握 RPC 编程的基础知识,并结合实战项目巩固所学。 一、网络编程三剑客 - BIO、NIO、AIO BIO...

    JAVA BIO AIO NIO测试代码

    对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码

    基于java的BIO、NIO、AIO通讯模型代码实现

    Java作为一门广泛使用的开发语言,提供了多种I/O(Input/Output)通信模型,包括传统的阻塞I/O(BIO)、非阻塞I/O(NIO)以及异步I/O(AIO)。这些通信模型在不同的场景下有着各自的优势,理解和掌握它们对于优化...

Global site tag (gtag.js) - Google Analytics