JavaAIO初探(异步网络IO)Java认证考试

文章作者 100test 发表时间 2010:01:01 15:48:18
来源 100Test.Com百考试题网


  按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO.如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO服用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO.阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO.

  Java nio 2.0的主要改进就是引入了异步IO(包括文件和网络),这里主要介绍下异步网络IO API的使用以及框架的设计,以TCP服务端为例。首先看下为了支持AIO引入的新的类和接口:

  java.nio.channels.AsynchronousChannel标记一个channel支持异步IO操作。

  java.nio.channels.AsynchronousServerSocketChannel ServerSocket的aio版本,创建TCP服务端,绑定地址,监听端口等。

  java.nio.channels.AsynchronousSocketChannel面向流的异步socket channel,表示一个连接。

  java.nio.channels.AsynchronousChannelGroup异步channel的分组管理,目的是为了资源共享。一个 AsynchronousChannelGroup绑定一个线程池,这个线程池执行两个任务:处理IO事件和派发 CompletionHandler.AsynchronousServerSocketChannel创建的时候可以传入一个 AsynchronousChannelGroup,那么通过AsynchronousServerSocketChannel创建的 AsynchronousSocketChannel将同属于一个组,共享资源。

  java.nio.channels.CompletionHandler异步IO操作结果的回调接口,用于定义在IO操作完成后所作的回调工作。AIO 的API允许两种方式来处理异步操作的结果:返回的Future模式或者注册CompletionHandler,我更推荐用 CompletionHandler的方式,这些handler的调用是由AsynchronousChannelGroup的线程池派发的。显然,线程池的大小是性能的关键因素。AsynchronousChannelGroup允许绑定不同的线程池,通过三个静态方法来创建:public static AsynchronousChannelGroup withFixedThreadPool(int nThreads,

  ThreadFactory threadFactory)

  throws IOException

  public static AsynchronousChannelGroup withCachedThreadPool(ExecutorService executor,

  int initialSize)

  public static AsynchronousChannelGroup withThreadPool(ExecutorService executor)

  throws IOException

  需要根据具体应用相应调整,从框架角度出发,需要暴露这样的配置选项给用户。

  在介绍完了aio引入的TCP的主要接口和类之后,我们来设想下一个aio框架应该怎么设计。参考非阻塞nio框架的设计,一般都是采用Reactor模式,Reacot负责事件的注册、0select、事件的派发;相应地,异步IO有个Proactor模式,Proactor负责 CompletionHandler的派发,查看一个典型的IO写操作的流程来看两者的区别:

  Reactor:


相关文章


Swing写的简单的计算器Java认证考试
struts2中使用token避免重复提交Java认证考试
用JAVA做的一个石头,剪刀,布的游戏Java认证考试
2009年的Java技术趋势Java认证考试
JavaAIO初探(异步网络IO)Java认证考试
动态表单及动态建表实现原理Java认证考试
Java设计模式之Singleton单例模式Java认证考试
Mechanize使用cookies模拟登录Java认证考试
正则表达式在java程序中的应用分析Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛