Stevens 在文章中的一种IO Model:

****blocking IO    #阻塞 IO   (系统调用不返回结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错才返回)

****nonblocking IO #非阻塞IO (用户进程其实是需要不断的主动询问kernel数据准备好了没有)

select/epoll (事件驱动)

优点:能够在等待任务完成的时间里做其它的任务即多个任务同时执行

缺点:1 循环调用recv()  幅度的占用CPU 这也是我们在代码中留一句time.sleep(2) 的原因,否则在低配

主机下极易出现卡机状态   2  任务完成的响应延迟增大了,因为每次都是周期循环这会导致数据吞吐量的降

****IO multiplexing  #多路复用IO (进程调用select, 整个进程会被block,同时kernel会‘监视’所有select

负责的socket,当任何一个socket中的数据准备好了,select 就会返回,这个时候用户进程自动将数据

从kernel拷贝到用户进程)

结论: select的优势在于可以处理多个索拉,不适用于单个连接

优点:占用资源少,不消耗太多cpu ,同时能够为多客户端提供服务,

缺点:该模型将事件探测和事件响应夹杂在一起,一旦事件响应的执行体庞大,则对整个模型是灾难性的。

****signal driven IO # 信号驱动 IO

****asynchronous IO   #异步IO (用户开启进程,一方面立刻开始做其它的事,另一方面,从kernel的

角度当它受到io 后会立刻返回,不会对进程产生任何block,等待数据准备完成将数据拷贝到用户内存

结束后kernel会给用户进程发送一个signal,告诉它完成

对于network IO 会经历两个阶段:

    1  等待数据准备 (waiting)

      2  拷贝到进程(copy)

区别: blocking vs non-blocking  (前者会一起调用block住对应 的进程直到操作完成

最新文章

  1. SecureCRT中文乱码解决已设置UTF-8
  2. JS原型链理解
  3. iOS Build Setting证书设置
  4. python 处理中文文件时的编码问题,尤其是utf-8和gbk
  5. Knockout.Js官网学习(系列)
  6. Android_listView
  7. POJ 2305 Basic remains(进制转换)
  8. Java常用类之String类练习
  9. <ul>标签设计简单导航栏
  10. svn提交代码时不要提交bulid里的内容,会报错
  11. 第5章 子网划分和CIDR
  12. 一天搞懂深度学习-训练深度神经网络(DNN)的要点
  13. 20190317 A
  14. PHP——base64的图片的另类上传方法
  15. dp之免费馅饼
  16. week5 0.1 安装materializecss
  17. .NET Core 常用加密和Hash工具NETCore.Encrypt
  18. 探寻main函数的“标准”写法,以及获取main函数的参数、返回值
  19. Gojs简单例子
  20. 10:Python2与Python3比较

热门文章

  1. List接口特有功能
  2. 解题(IdenticalTree--拓扑结构相同子树 )
  3. [Solution] 821. Shortest Distance to a Character
  4. ECMAScript 6
  5. 【iOS】値の判断
  6. 项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
  7. easyui 单元格超出鼠标放上弹出全部
  8. php 守护进程(Daemon)
  9. kivy sdl2 - ImportError: DLL load failed: 找不到指定的模块。
  10. Linux驱动之LCD驱动编写