linux应用编程:五种I/O模型

一、I/O多路复用模型(I/O multiplexing )

  • 什么是IO复用?

在这里插入图片描述
– I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流
– 通俗的讲就是在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流(即分时复用的方式)。
– 实现I/O复用的方式有select poll epoll机制。主要用于服务器的并发处理。

  • 在看后面 select相关章节
    在这里插入图片描述

二、 阻塞I/O模型

  • 当进程在执行过程中,它发出一个I/O请求操作(如recvfrom 读操作),如果请求操作需要的条件不满足(没有数据),它会一直在那等待(阻塞进程),直到条件满足。
    在这里插入图片描述

三、非阻塞I/O模型

  • 当进程在执行过程中,它发出一个I/O请求操作,如果请求操作需要的条件不满足,会立即返回一个标志信息,告知条件不满足,不会一直等待。在这里插入图片描述

四、信号驱动I/O模型

  • 我们首先开启套接字的信号驱动式IO功能,并通过sigaction系统调用安装一个信号处理函数。该系统调用将立即返回,进程不阻塞。当数据条件满足时,内核向用户进程发送 SIGIO信号。随后进程调用 recvfrom读取数据,并通知主循环数据已准备好待处理,也可以立即通知主循环,让它读取数据报。
  • 这种模型的优势在于等待数据报到达期间进程不被阻塞。主循环可以继续执行,只要等待来自信号处理函数的通知:既可以是数据已准备好被处理,也可以是数据报已准备好被读取。
    在这里插入图片描述

五、 异步I/O

  • 进程告知内核需要执行某个I/O操作,然后当内核完成后(包括将数据从内核复制到用户进程缓存区都是由内核完成)通知进程,这期间进程不阻塞。
  • 与信号驱动模型的主要区别在于:信号驱动式IO是由内核通知我们何时可以启动一个IO操作,而异步IO模型是由内核通知我们IO操作何时完成。
    在这里插入图片描述

六、 对比

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值