I/O多路复用实际上就是用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。好处就是单个进程可以处理多个socket。当然具体区别我们后面再讨论,现在先来看下I/O多路复用的流程:

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

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

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

4.信号驱动I/O模型
老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李,然后老李去火车站交钱领票。
耗费:无需打电话

5.异步I/O模型
老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李并快递送票上门。
耗费:无需打电话

1. I/O多路复用

1.1 它的形成原因

如果一个I/O流进来,我们就开启一个进程处理这个I/O流。那么假设现在有一百万个I/O流进来,

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

参考链接:

https://www.jianshu.com/p/6a6845464770

最新文章

  1. JS与APP原生控件交互
  2. Mysql的用户名密码设置方法
  3. JavaScript Array和string的转换
  4. python之路-Day3
  5. tuple元组(C++11及以后,如C++14)
  6. hdu 1978 How many ways
  7. MSSQL显错注入爆数字型数据的一点思考
  8. 三种客户端访问wcf服务端的方法 C#
  9. oracle10g安装图解(win7)
  10. WPF界面设计技巧(1)—不规则窗体图文指南
  11. 再见,CSDN
  12. 交叉编译 tesseract
  13. cw2vec理论及其实现
  14. 有效的字母异位词的golang实现
  15. android 图片上传图片 报Socket: Broken pipe
  16. BZOJ 4763
  17. hive中的with用法
  18. c# 动态数组-----“动态”数组
  19. maven一模块字段调用另一个模块数据生成下拉框
  20. excel中散点图和折线图的区别(散点图时间均匀分布)

热门文章

  1. Apache Kafka主题 - 架构和分区
  2. TensorFlow学习笔记(1)—— 基本概念与框架
  3. 【IDEA使用技巧】(2) —— 模板设置
  4. 不一样的go语言-go缺少的语言特性
  5. 为了防止页面重新自动加载,可以给a标签设置href="javascript:void(0);"
  6. AspNetCore Redis实现分布式缓存
  7. C# VS启动调试项目允许外网调试(微信开发)
  8. Git提交代码解决方案
  9. Swift之xib模块化设计
  10. 深入理解TCP三握四挥