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住对应 的进程直到操作完成
IO模型的介绍的更多相关文章
- Windos下的6种IO模型简要介绍
windows进行数据的收发有6种IO模型.分别是阻塞(blocking)模型,选择(select)模型,异步选择(WSAAsyncSelect)模型,事件选择(WSAEventSelect )模型, ...
- 网络 IO 模型简单介绍
一.同步阻塞 IO(BIO) 当用户线程调用了 read 系统调用,内核(kernel)就开始了 IO 的第一个阶段:准备数据.很多时候,数据在一开始还没有到达(比如,还没有收到一个完整的Socket ...
- netty学习(一)--linux下的网络io模型简单介绍
linux的内核将全部的外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令 ,返回一个file descriptor(fd.文件描写叙述符).而对一个socket的读写也会有对 ...
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
- 网络IO模型
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- [转载] 网络IO模型
转载自http://blog.csdn.net/zhoudaxia/article/details/8974779 同步(synchronous) IO和异步(asynchronous) IO,阻塞( ...
- 5种网络IO模型
5种网络IO模型(有图,很清楚) 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到 ...
- 5种网络IO模型(有图,很清楚)
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
随机推荐
- python 获取流文件 大小
buffer_file_content=u"流文件内容" file_size = len(buffer_file_content)/ #kb
- scrapy Mongodb 储存
pipelines.py # -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your ...
- Mnist
Mnist 先贴一个介绍的很好的博客 https://blog.csdn.net/sysushui/article/details/53257185 mnist是一个手写体数字的数据集.上图是数据集的 ...
- boost asio死锁一例
socket close -> sendmessage -> io_service stop 先关闭socket句柄,再给windows窗口发送消息,然后io_service停止. 当se ...
- [并查集][NOIP2015]信息传递
信息传递 题目描述 有 N 个同学( 编号为 1 到 N) 正在玩一个信息传递的游戏. 在游戏里每人都有一个固定的信息传递对象, 其中,编号为i的同学的信息传递对象是编号为ti的同学. 游戏开始时, ...
- POJ 3162.Walking Race 树形dp 树的直径
Walking Race Time Limit: 10000MS Memory Limit: 131072K Total Submissions: 4123 Accepted: 1029 Ca ...
- python基础之Day18
一.序列化概念 什么是序列化? 内存中的数据结构转成中间格式(json(所有编程语言通用)和pickle)存储到硬盘或基于网络状态 反序列化: 硬盘网络传来的数据格式转换成内存的数据结构 为什么 1. ...
- oracle 索引提升查询速度, in 和 exist 效率
做记录: 今天有一个有153万条数据的表,发现查询很慢: select count(y) as transfereeNum,x from t_ast_subject_invest_order GROU ...
- java多线程系列 目录
Java多线程系列1 线程创建以及状态切换 Java多线程系列2 线程常见方法介绍 Java多线程系列3 synchronized 关键词 Java多线程系列4 线程交互(wait和 ...
- centos6.6安装Elasticsearch
1. 安装jar8 yum list java-1.8* sudo yum install java-1.8.0-openjdk* -y java --version 2. 安装elasticsear ...