操作系统:高级IO

高级IO

1.关于IO

IO的基本类型:

I代表输入(Input):

  • 从外部设备或来源(如键盘、鼠标、文件、网络)读取数据到计算机中。
  • 示例:用户键入的文本、从文件读取的数据、从网络接收到的数据包。

O代表输出(Output):

  • 将计算机处理后的数据发送到外部设备或目的地(如显示器、打印机、文件、网络)。
  • 示例:屏幕上显示的文本、写入文件的数据、发送到网络的消息。

2.IO模型

①.阻塞IO

        在进行IO操作时,当前进程或者线程会被阻塞,直到IO操作完成。

  

        例如scanf,在你没有输入任何内容时,他会卡在那里,直到等到你输入内容回车后,菜继续执行。那么在没有输入任何内容时,进程就进入到了阻塞态,等待你输入内容,然后进入到就绪队列,然后被CPU调度变为运行态,最终执行完成。

②.非阻塞IO

  • 轮询:比如你又一个快递,你会去查看,但是查看之后你不会一直去等待这个快递在这个过程中什么事你都不去干。正常来说,你会看一下快递到了吗,然后就去干别的事,然后过一段时间又看一下到了吗,直到你的快递到达。这个过程就叫做轮询
  • 信号机制:等待一个信号的发生,然后做出对应的操作
  • 通信机制:计算机网络
  • 非阻塞IO适用于IO多路复用
③.缓存IO

  • 缓存:当你寄快递,快递公司不可能只为了
    #include <sys/select.h>
    
    int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
    一个快递发一个车,他会等到一定数量才发车。这就叫做缓存。
  • 行缓冲机制:C语言中的3个标准流
④.直接IO

  • 直接写入到硬盘,没有任何缓存。
⑤.同步IO

  • 当你通过IO进行写入时,他会写入到缓存,然后当你保存时写入到磁盘上,最后完全写入到磁盘后才进行返回,保存成功。

3.IO多路复用

为什么要引入IO多路复用?

为了是一个程序能够同时监听多个文件描述符(文件、套接字等)以等待事件(如数据到达、IO写入等等)。这样通过这样就可以更方便的去管理阻塞的问题。

IO多路复用相应函数:
select

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初猿°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值