学习高性能服务系统:网络I/O模型

关于 网络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是通过选择器进行匹配。

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/86373909