基本概念理解
channel 轨道 buffer火车 selector 调度中心
1.buffer与channel之间相互读写
2.NIO本质: 不管是读还是写针对buffer操作,客户端与buffer交互,通过buffer实现非阻塞
3.之前BIO read客户端是否阻塞的,现在从buffer中读取是非阻塞的,用一个线程可以读取多个通道,哪个通道有数据过来(事件),能感知,即服务端多线程中每个线程处理多个通道,哪个通道有数据,处理哪个。
4.不是轮询,是Reactor模式,事件通知Selector去执行哪个channel
5.selector 相当于BIO socket,观察者模式,感知通道中是否有数据发来
6.一个服务端线程管理多个selector
基本介绍
关系图
Buffer
Buffer code
@Slf4j
public class BufferService {
public static void main(String[] args) {
IntBuffer intBuffer = IntBuffer.allocate(10);
for (int i = 0; i < intBuffer.capacity(); i++) {
intBuffer.put(i);
}
intBuffer.flip();
while (intBuffer.hasRemaining()) {
log.info("read intBuffer: {}", intBuffer.get());
}
}
}