AIO编程,在NIO基础之上引入了异步通道的概念,并提供了异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,之前我们学习的NIO只是非阻塞而并非异步。而AIO它不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写,从而简化了NIO编程模型。也可以称之为NIO2.0,这种模式才真正的属于我们的异步非阻塞的模型。

AsynchronousServerSocketChannel

AsynchronousSocketChannel

下面看一下AIO通信的实现方式:

在35行,accept方法这里有一个this的参数,这个参数要特别注意一下,这里指的是实例化的Server对象,同下面代码的第17行,下面的这个This指的是实例化的

ServerCompletionHandler,这样反复的执行,可以确保多个客户端都可以阻塞

下面看一下Client代码:

这边起了3个客户端,需要注意的是,Server端的代码和Client端的代码需要一直执行着,所以在Server端使用了休眠,在Client端使用了死循环,这样确保代码是一直运行着的,现在我们运行一下,看一下答应的结果。

Server端打印结果:

看一下Client端打印结果:

需要注意的地方是在声明缓存池的时候,不要使用固定数量的线程池,那要的话接入的客户端数据就会存在问题。

BIO,NIO,AIO的区别:

BIO是传统的通信,使用的是TCP的三次握手,也就是传统的socket编程,接入一个客户端,就新建一个线程。是同步阻塞的方式。

NIO是同步非阻塞的方式实现的,其中最关键的是使用了selector注册器进行通道的注册。

AIO是异步非阻塞的方式实现的,其中是使用了线程池和通道的配合,并且一直反复的调用,来实现这种异步非阻塞的实现方式。

AIO编程的更多相关文章

  1. Java NIO系列教程(八)JDK AIO编程

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  2. NIO&AIO编程模型

    NIO线程模型 什么是NIO线程模型? 上图是NIO的线程模型,  基于select实现,   这种线程模型的特点:  多条channel通过一个选择器和单挑线程绑定, 并且在这种编程模型中, Cha ...

  3. 手动搭建I/O网络通信框架4:AIO编程模型,聊天室终极改造

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊 第三章:手动搭建I/O网络通信框架3:NI ...

  4. 深入学习Netty(3)——传统AIO编程

    前言 之前已经整理过了BIO.NIO两种I/O的相关博文,每一种I/O都有其特点,但相对开发而言,肯定是要又高效又简单的I/O编程才是真正需要的,在之前的NIO博文(深入学习Netty(2)--传统N ...

  5. JDK AIO编程

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供两种方式获取获取操作结果. 通过java.util.concurrent.Future类来表示异步操作的结 ...

  6. Java IO编程全解(五)——AIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...

  7. Netty权威指南之AIO编程

    由JDK1.7提供的NIO2.0新增了异步的套接字通道,它是真正的异步I/O,在异步I/O操作的时候可以传递信号变量,当操作完成后会回调相关的方法,异步I/o也被称为AIO,对应于UNIX网络编程中的 ...

  8. (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  9. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

随机推荐

  1. mysqldump备份时保持数据一致性

    对MySQL数据进行备份,常见的方式如以下三种,可能有很多人对备份时数据一致性并不清楚 1.直接拷贝整个数据目录下的所有文件到新的机器.优点是简单.快速,只需要拷贝:缺点也很明显,在整个备份过程中新机 ...

  2. UI5-学习篇-13-Eclipse 开发UI5应用

    1.Eclipse环境配置及组件安装 UI5-学习篇-1-Eclipse开发工具及环境搭建 2.创建项目 3.设置代理映射 打开WebContent->WEB-INF->web.xml文件 ...

  3. Dictionary转为Model实例

    Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add(); dic.Add(&q ...

  4. 跨域(六)——window.name

    window.name也可以进行跨域数据传输. 下面是相应的代码,evil.html跨域读取foo.html的数据,其中proxy.html和evil.html同域,没有任何内容. evil.html ...

  5. 使用xshell xftp连接centos的过程。

    1 配置网络 登录Centtos系统,配置网卡. cd 空格/etc/sysconfig/network-scripts  回车键. ls 查看文件 vi ifcig-eth0  编辑这个文件 修改为 ...

  6. 第一个Python脚本!

    # hello.py print 'Hello Pythons'

  7. MongoDB的常规备份策略

    MongoDB的备份其实算是一个基本操作,最近总是有人问起,看来很多人对这里还不太熟悉.为了避免一次又一次地重复解释,特总结成一篇博客供后来者查阅.如有不尽正确之处请指正. 1. 内建方法 1.1 复 ...

  8. Hibernnate 一对多多对一双向关联

    Group.java package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax ...

  9. win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please install the Redistributable then run this installer again 的解决办法

    本文地址:http://www.cnblogs.com/jying/p/7764147.html    转载请注明出处. 安装过程其实挺简单,基本上下一步下一步,可以参考我的另一篇mysql安装文章: ...

  10. C++学习二继承

    转载自https://www.cnblogs.com/33debug/p/6666939.html 1.继承与派生  继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.简单的说,继承 ...