五种基本IO模型

输入/输出IO过程 等待IO事件就绪和数据拷贝 特点、优缺点
阻塞IO 在内核将数据准备好之前, 系统调用会一直等待。 所有的套接字, 默认都是阻塞方式。
非阻塞IO 如果内核还未将 数据准备好, 系统调用会直接报错返回。 就需要程序员反复判断IO事件是否就绪,对CPU消耗比较严重。
信号驱动IO 内核将数据准备好的时候, 使用SIGIO信号通知应用程序进行IO操作。 操作系统通过信号通知应用进行IO操作
异步IO 内核在数据拷贝完成时, 通知应用程序。 数据拷贝由系统完成,没有等待时间。

1.阻塞I/O模型
老李去火车站买票,排队三天买到一张退票。
耗费:在车站吃喝拉撒睡 3天,其他事一件没干。

2.非阻塞I/O模型
老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。
耗费:往返车站6次,路上6小时,其他时间做了好多事。

3.I/O复用模型
1.select/poll
老李去火车站买票,委托黄牛,然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,打电话17次
2.epoll
老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,无需打电话

4.信号驱动I/O模型
老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,免黄牛费100元,无需打电话

5.异步I/O模型
老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李并快递送票上门。
耗费:往返车站1次,路上1小时,免黄牛费100元,无需打电话

如果一个I/O流进来,我们就开启一个进程处理这个I/O流。那么假设现在有一百万个I/O流进来,那我们就需要开启一百万个进程一一对应处理这些I/O流(这就是传统意义下的多进程并发处理)。思考一下,一百万个进程,你的CPU占有率会多高,这个实现方式极其不合理。所以人们提出了I/O多路复用这个模型,一个线程,通过记录I/O流的状态来同时管理多个I/O,可以提高服务器的吞吐能力。

猜你喜欢

转载自blog.csdn.net/Vickers_xiaowei/article/details/92828855
今日推荐