bio: blocking IO
nio: Non-blocking IO Reactor(反应)模式,事件驱动
aio: Asynchronous Input/Output proactor模式,jdk7
阻塞与非阻塞,公交车例子:
1. 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车。 ( 类似阻塞式 )
2. 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车。 ( 类似非阻塞 )
bio:
所能支撑的连接数是有限的,需限制创建线程数量。一连接一线程:accept获取socket后(不一定是真实请求),将socket放入一个线程处理。
nio:
Selector
非阻塞 IO 的核心类,它能检测一个或多个通道 (channel) 上的事件,并将事件分发出去。
使用一个 select 线程就能监听多个通道上的事件(Set<SelectionKey> keys=selectionKey.selectedKeys()),并基于事件驱动触发相应的响应。而不需要为每个channel去分配一个线程。
SelectionKey
包含了事件的状态信息(selectionKey.isConnectable())和事件对应的通道的绑定。(selectionKey.channel())
ByteBuffer
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel
channel.read(buffer) channel.write(buffer)
java nio简介:http://alicsd.iteye.com/blog/834447