关于 网络I/O模型
网络传输的信息格式
- XML:应用广泛,适合做网络通讯的信息描述格式
- JSON:轻量级的数据交换格式。
- Protocol Buffer(PB):一种数据交换格式
- TLV:T:类型域 L:大小域 V:内容域 用于金融、军事领域
- 自定义格式:比如Apache Thrift序列化后的数据
BIO的阻塞问题:
无论是客户端还是服务器,同一时间只能发送或者接受一个信息。处于等待回复的间隔,便是"阻塞"问题。
即使使用多线程的方式 服务器端的accept()、read()方法依旧会被阻塞。
NIO同步非阻塞——是对BIO同步阻塞的改进
NIO,又称为多路复用I/O模型。
应用场景:适用于"高并发"场景 ,其他情况NIO没有明显优势
NIO:数据从通道读入缓冲区,从缓冲区写入通道。
- Channel通道:用于应用程序与操作系统进行交互的渠道。
- buffer缓冲区:保证每个通道的读写速度。
- Selector选择器:实现Channel与指定的I/O事件进行绑定。
通道类似于流,但是有区别:
1.通道既可以读数据,也可以写数据。但是流的读写操作是单向的。
2.通道可以异步读取
3.通道的数据总是要经过缓冲区
AIO异步非阻塞
异步的体现:
- 同步的I/O流 服务器端不会"主动"联系客户端 ,但是AIO在数据准备完成后,会主动通知”客户端“
- 异步的I/O是交给OS处理,而异步应用自己会处理。
AIO与NIO的区别:
AIO与NIO都是通过管道的方式进行I/O操作,但是AIO每一个处理器与通道都是独立的、一一对映,NIO是通过选择器进行匹配。