BIO
阻塞式同步I/O
可以通过线程池来增加吞吐量
(将单线程改为多线程可以有效增加吞吐量)
(或者可以对每一个socket请求设置一个线程,但是线程的创建和销毁需要时间,所以不会导致QPS的显著增加)
NIO
非阻塞式同步I/O
NIO的三大组件
1.Channel:包括FileChannel, DatagramChannel, SocketChannel以及SeverSocketChannel.
2.Buffer:是一个缓存区,本质是一个数组,向Channel读取和写入数据.
ByteBuffer, charBuffer,shortBuffer,IntBuffer. 八大基本数据类型
3.Selector
分为三大类:
MapperByteBuffer,HeapByteBuffer(JVM堆内存),DirectByteBuffer(JVM进程内存)
状态变量:
capacity:最大容量
position:当前读写位置
limit:读写限制
Mark:标记position位置,在下一次读写时position的位置.便于重复读
flip读写操作:
clear清楚操作:
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
System.out.println(byteBuffer);
byteBuffer.putInt(1);
byteBuffer.putInt(2);
byteBuffer.putInt(3);
System.out.println(byteBuffer);
byteBuffer.flip();
System.out.println(byteBuffer);
System.out.println(byteBuffer.remaining());
byteBuffer.getInt();
byteBuffer.getInt();
byteBuffer.getInt();
System.out.println(byteBuffer);
byteBuffer.clear();
System.out.println(byteBuffer);
}
只用ByteBuffer和Channel只能保证QPS 2.0