IO多路复用?我所理解的IO模式
1:IO的过程
当我们调用系统函数read时,一般会经历两个阶段:
1:等待数据准备(waiting for the data be ready)
2:将数组从内核拷贝到进程(从内核态到用户态)(copying the data from the kernel to the process)
在"等待数据准备"这个状态,我们最常见到的就是网路请求,即内核等待网络中的数据到网口的缓冲区。在数据到网口的缓冲区后,才会发生第二阶段,将数据从内核态拷贝到用户进程(用户态)。
所以我么常说各种IO模型就是对这两个状态的不同的描述
2:常用的IO模型有哪些
IO模型大体分为两大类:同步IO和异步IO;同步IO又包含:阻塞IO,非阻塞IO,IO多路复用,信号驱动IO
区别是什么呢?当我们调用系统函数read时
阻塞IO(blocking IO): 在上述的两个状态(等待数据和拷贝数据)都被阻塞了
非阻塞IO(non-blocking IO):在这个场景中,在第一阶段,用户进程是会不断轮询kernel是否准备好数据。kernel准备没准备好数据都会返回,如果准备好,进行第二阶段。如果没准备好则返回error,用户进程收到error后会继续轮询知道数据准备好。
IO多路复用(IO Multiplxing):又叫事件驱动IO。底层用的是 select/poll/epoll等调用,有点是单个线程可以监控多个网路IO。而在阻塞IO模型中,则必须使用多线程才能达到同样的效果。注意:这不意味着多路服用处理单个连接能处理的更快,只是单个线程能处理更多的连接。
信号驱动(signal IO):这个场景中,用户进程会通知内核,在数据准备好后要发个信号通知用户进程;用户进程在收到信号后发起系统调用等待内核将数据拷贝到用户线程。在第二阶段仍是阻塞的。
异步IO(asynchronous IO):这个和信号驱动类似,不同的是直到数据拷贝到用户进程后才会发信号通知用户进程。整个过程不会阻塞用户线程。
3:IO多路复用和多线程的区别以及使用场景
上面我们说到,在阻塞模式下,一个服务想要并行处理多个IO尽量使用多线程。但是创建线程耗时耗资源,所以我们一般都是使用线程池来代替多线程。
我们也说到,多路复用可以单线程监控多个IO。而且单线程不会涉及到多线程同步的问题,也不会涉及到CPU线程上下文切换的问题。但是缺点也随之而来,如果同时有大量的IO需要处理的话,那么排在后面IO肯定等待的时间长。因此,这种场景适用于那些有大量连接,但是数据交互不频繁的场景,如聊天室。而多线程适用与那些大量短连接的场景,如web服务器。
我们了解到的nginx,tornado,redis等都用了IO多路复用技术。Java中的NIO指的是(new IO),用的也是IO多路复用技术,而不是non-blocking IO。
4:计算密集型和IO密集型
计算密集型任务最主要的是消耗CPU资源,即CPU运行时间/IO等待时间的比值高。如常见的加密解密,转码等操作都是很耗CPU的。在CPU密集型任务中,为了使CPU得到充分的利用,我们一般会采用多线程。但是线程数量不易太大,一般和CPU核心数持平,如果线程数量过大,可能会CPU会频繁的在线程间切换,造成资源浪费。而且CPU密集型任务使用执行效率比较高的语言也很重要。
对于IO密集型任务,IO时间要远大于CPU运行时间。所以任务越多,那么CPU的效率也就越高。对于这种任务,使用执行效率高的语言对整体影响不大。我们可以在IO没有达到峰值的时候增加任务,如果IO已经达到峰值,再添加任务也只能等待了。
5:CPU和线程的关系
CPU是系统资源,而线程可以看成我们的要执行指令的集合。我们的指令是否要执行是我们指定的,但是什么时候执行却是系统调度的。例如在线程执行一个阻塞命令时,CPU会闲置,也可以去处理其他的任务。
IO多路复用?我所理解的IO模式的更多相关文章
- 聊聊IO多路复用之select、poll、epoll详解
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...
- IO多路复用,同步,异步,阻塞和非阻塞 区别
一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...
- IO多路复用,同步,异步,阻塞和非阻塞 区别(转)
转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 同步.异步 是 ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- 并发编程(IO多路复用)
阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchro ...
- 什么是IO多路复用?Nginx的处理机制
先来说一下什么是IO复用? IO复用解决的就是并发行的问题,比如多个用户并发访问一个WEB网站,对于服务端后台而言就会产生多个请求,处理多个请求对于中间件就会产生多个IO流对于系统的读写.那么对于IO ...
- 39 - 同步-异步-IO多路复用
目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...
- IO多路复用,协程,
一.单线程的并发 import socket import select client1 = socket.socket() client1.setblocking(False) # 百度创建连接: ...
- python开发IO模型:阻塞&非阻塞&异步IO&多路复用&selectors
一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...
随机推荐
- Django项目BBS博客论坛
BBS 项目开发逻辑梳理 第一步:先进行数据库设计 数据库设计规则是: 1.先创建基表:用户表.站点表.文章表.标签表.分类表.文章2标签第三张关系表.点赞点踩表.评论表 2.书写表中的基本含有的字段 ...
- IIS配置svc(IIS8中添加WCF支持几种方法小结)
方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ...
- 《Java知识应用》Java加密方式(Base64)详解
1. 说明 Base64加密方式:比较简单,加密快,对普通大众可以起到加密的作用.在程序员眼中和透明一样. Base64应用场景:图片转码(应用于邮件,img标签,http加密) 2. 案例 impo ...
- vue hover如何触发事件?
vue中并没有 @hover 事件,但是可以使用 @mouseenter 和 @mouseleave 来模拟hover操作.
- Mysql基于Mysql Cluster+MysqlRouter的集群部署方案
http://note.youdao.com/noteshare?id=a61c4a6ff2b76e5305430eb66eb116e2&sub=4B4B6E8D0E2849F9B0DFB67 ...
- 百度大脑UNIT3.0智能对话技术全面解析
智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...
- Linux-进程的观察
16.1.1 进程与程序 ·程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘.光盘.软盘.磁带等), 为实体文 件的型态存在: ·进程 (process): ...
- 最新IDEA永久激活
此教程已支持最新2019.2版本 本教程适用Windows.Mac.Ubuntu等所有平台. 激活前准备工作 配置文件修改已经不在bin目录下直接修改,而是通过Idea修改 如果输入code一直弹出来 ...
- LinqDB 查询数据库
LinqDB数据库查询数据,还是很方便的. 1. 添加Entity数据实体类 方便之后映射操作 /// <summary> /// 课件 /// </summary> [Dat ...
- 关于Fastjson 1.2.24 反序列化导致任意命令执行漏洞
环境搭建: sudo apt install docker.io git clone https://github.com/vulhub/vulhub.git cd vulhub fastjson 1 ...