关于I/O理解的个人记录

I/O是什么?

从细节出发,搜寻本质

从C语言开始,我们就接触过一个头文件

# include <stdio.h>

上面的头文件实际上是 standard input and output 的缩写,标准输入输出

所以IO就是输入输出。


I/O分为什么?

  1. 阻塞IO
  2. 非阻塞IO
    非阻塞IO通常要和其他IO通知机制一起使用,
    比如IO复用和SIGIO信号。

I/O复用是什么?

如上所述,IO复用是一种最常使用的IO通知机制

它指的是,应用程序通过IO复用函数向内核注册一组事件,
内核通过IO复用函数把其中就绪的事件通知给应用程序。

I/O复用函数

IO复用函数本身是阻塞的,但是他们可以同时监听多个IO事件

  1. select
  2. poll
  3. epoll

IO模型

阻塞IO,IO复用,信号驱动IO都是同步IO模型

IO模型读写操作和阻塞阶段
阻塞IO程序阻塞于读写函数
IO复用程序阻塞于I/O复用系统调用,但可同时监听多个IO事件,对IO本身读写是非阻塞的
SIGIO信号信号出发读写就绪事件,用户程序执行读写操作,程序没有阻塞阶段
异步IO内核执行读写操作并触发读写完成事件,程序没有阻塞阶段

事件处理模式

服务器通常需要处理三类事件:IO事件,信号,定时事件

两种高效的事件处理模式

  1. Reactor
    同步IO模型通常用于实现Reactor模式
    Reactor是这样一种模式:
    它要求主线程(IO处理单元)只负责监听文件描述上是否有事件发生,
    有的话就立即将该事件通知工作线程(逻辑单元)。
    除此之外,主线程不做任何其他实质性工作。
    读写数据,接收新的连接,以及处理客户请求均在工作线程中完成。

  2. Proactor
    异步IO模型则用于实现Proactor模式

    Proactor模式将所有IO操作都交给主线程和内核来处理,工作
    

边缘触发
只有当数据由少变多,才会触发事件。
水平触发
只要有数据,就触发事件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值