全网最精简操作系统——IO模型知识

目录

  • 基础概念

  • IO阶段

  • IO模型分类

  • select、poll、epoll的区别

一、基础概念

IO:数据的读取或写入操作,目前通常指网络IO磁盘IO

同步与异步

  1. 同步:所有的操作都做完,才返回给用户结果
  2. 异步:不用等所有操作都做完,就响应用户请求

阻塞与非阻塞

  1. 阻塞:调用者调用某个函数,等待函数返回,期间什么也不做,不停检查函数有没有返回,必须等这个函数返回后才能进行下一步动作
  2. 非阻塞:每隔一段时间就去检查IO事件是否就绪,没有就绪就可以做其他事情

二、IO阶段

IO分为两阶段:

(1)用户进程空间与内核空间之间的相互切换

(2)内核空间与设备空间的相互切换

Linux中进程无法直接操作I/O设备,其必须通过系统调用请求内核来协助完成I/O动作,内核会为每个I/O设备维护一个缓冲区,具体操作如下:

(1) 进程IO系统调用

(2) 内核查看缓冲区有无缓存数据

(3) 若有,则直接复制到进程空间;若没有,则到设备中读取

三、IO模型分类

  1. 阻塞IO:进程发起IO系统调用后,进程被阻塞,转到内核空间处理,整个IO处理完毕后返回进程
  2. 非阻塞IO:进程发起IO系统调用后,进程被阻塞,内核数据还没好,不想让进程等待,就返回一个错误,进程退出阻塞状态,每隔一段时间发起IO系统调用去检查IO事件是否就绪
  3. IO多路复用:和阻塞IO不同的是其可以同时阻塞多个IO操作
  4. 异步IO:进程发起IO系统调用后立即返回,当内核将数据拷贝到缓冲区后,再通知进程,进程可以直接使用数据

四、select、poll、epoll的区别

I/O多路复用就是通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪能够通知应用程序进行相应的读写操作

对于高并发场合,采用IO多路复用往往会使得单线程/单进程起到多线程/多进程的效果,并且减小了上下文切换的开销,效率更高!

select、poll、epoll本质都是同步阻塞IO,它们都需要在读写事件就绪后自己负责进行读写

select目前既可以应用在windows系统也可以应用在Linux系统
poll、epoll只能应用在Linux系统

select特征

(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大

(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大

(3)select支持的文件描述符数量太小了,默认是1024

(4)  时间复杂度:O(n)

poll特征

(1)相比于select,poll采用链表的方式替换原有fd_set数据结构,使其没有文件描述符个数的限制

(2)其余与select相同

epoll特征

(1) epoll只要判断就绪链表是否为空就可,不需要遍历传递进来的所有fd

(2)epoll只要一次拷贝,不需要每次调用都把fd集合拷贝到内核态

(3)epoll没有文件描述符数量限制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值