同步阻塞式IO(BIO)
BIO主要的问题在于每次有一个新的客户端接入的时候,服务端必须创建一个新的线程处理新接入的链路,一个线程只能处理一个客户端连接
伪异步I/O模型
伪异步I/O使用了线程池实现,避免了为每一个请求创建一个独立线程,而造成资源耗尽的问题,但是还是有问题,线程池采用阻塞队列实现,队列积满之后,后续入队列将会被阻塞
NIO(New-I/O或者Non-BlOCK I/O)
1、缓冲区buffer
在NIO的库中,所有的数据都是通过缓冲区来处理的,在读取数据时候,他是直接读到缓冲区的,包含:ByteBuffer、CharBuffer、ShotBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,都是实现Buffer接口
2、Channel通道
就像一个自来水管一样,网络数据通过Channel读取和写入,通道是双向的,流只是在一个方向上移动,channel是全双工通信,能够同时支持读写操作
3、多路复用器Selector
AIO(NIO异步通道)
是真正的异步非阻塞IO,对于时间驱动AIO,
TCP
TCP发生拆包粘包情况
1、应用程序write写入字节大小大于套接扣发送缓冲区大小
2、进行MSS(是网络传输数据最大值)大小的TCP分段
3、以太网帧的payload(有效载荷:在一个数据包或者其它传输单元中运载的基本必要数据,httppost的有效数据)大于MTU(最大传输单元)进行IP分片