IO模型的介绍
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住对应 的进程直到操作完成
最新文章
- SecureCRT中文乱码解决已设置UTF-8
- JS原型链理解
- iOS Build Setting证书设置
- python 处理中文文件时的编码问题,尤其是utf-8和gbk
- Knockout.Js官网学习(系列)
- Android_listView
- POJ 2305 Basic remains(进制转换)
- Java常用类之String类练习
- <;ul>;标签设计简单导航栏
- svn提交代码时不要提交bulid里的内容,会报错
- 第5章 子网划分和CIDR
- 一天搞懂深度学习-训练深度神经网络(DNN)的要点
- 20190317 A
- PHP——base64的图片的另类上传方法
- dp之免费馅饼
- week5 0.1 安装materializecss
- .NET Core 常用加密和Hash工具NETCore.Encrypt
- 探寻main函数的“标准”写法,以及获取main函数的参数、返回值
- Gojs简单例子
- 10:Python2与Python3比较
热门文章
- List接口特有功能
- 解题(IdenticalTree--拓扑结构相同子树 )
- [Solution] 821. Shortest Distance to a Character
- ECMAScript 6
- 【iOS】値の判断
- 项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
- easyui 单元格超出鼠标放上弹出全部
- php 守护进程(Daemon)
- kivy sdl2 - ImportError: DLL load failed: 找不到指定的模块。
- Linux驱动之LCD驱动编写