WEB开发网
开发学院软件开发Java Java AIO初探(异步网络IO) 阅读

Java AIO初探(异步网络IO)

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,Java AIO初探(异步网络IO),按照POSIX标准来划分只分为两类:同步IO和异步IO,如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,AsynchronousServerSoc

按照《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将同属于一个组,共享资源。

1 2 3 4 5 6  下一页

Tags:Java AIO 初探

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接