高级IO——五种IO模型

高级IO

​ 在应用层进行高效地IO;

一、五种IO模型

1.1前置知识

​ read和write接口当没有数据或者缓冲区满了的时候就会进行阻塞式地等待,即操作系统并不一定来数据就对数据进行处理,最终是否处理由操作系统本身决定;

IO = 等待 + 拷贝;所以进行拷贝前就要判断条件是否成立,然后决定是否进行拷贝,这个条件又叫做读写事件;等待读事件就绪意味着接收缓冲区当中有数据了,可以进行读,等待写事件就绪就意味着发送缓冲区中有空间了,可以进行写操作了;

​ 高效地IO意味着可以在较短的时间内拷贝更多的数据;换句话说就是,让IO过程中的等待部分占比减少,拷贝部分增加;多线程并发访问就是使等待的时间减少了;

​ 总结:进行高效地IO就是使等待的时间进行减少;

1.2IO模型

​ 钓鱼就是等待的时间多,真正钓鱼的时间少;

​ 1.阻塞式IO,阻塞等待子进程;

在这里插入图片描述

​ 2.非阻塞式IO,非阻塞轮询等待子进程;

在这里插入图片描述

​ 3.信号驱动式IO;

在这里插入图片描述

​ 4.多路复用,多路转接IO,多线程并发访问,使得等待时间重叠,提高了命中概率;

在这里插入图片描述

​ 5.异步IO,用户发起请求,操作系统分配一个缓冲区和通知方式,进行提供数据,判断数据是否就绪并通知;

在这里插入图片描述

​ 以上前4种IO都是同步IO;

​ 阻塞IO和非阻塞IO等待和拷贝是一样的,只不过阻塞是无其他行为等待,而非阻塞是执行其他任务变相地等待,时间都是等价;

​ 同步IO和异步IO,区别就是有没有直接参与IO,异步IO不参与IO只是发起请求;

​ 异步IO本质上还是使用的一个执行流,提高不了效率并且代码容易造成逻辑混乱,所以使用了协程技术解决此问题;实际上最高效的IO方式是多路复用方式;

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 03:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 03:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 03:34:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 03:34:02       91 阅读

热门阅读

  1. mybatis的include和sql的使用

    2024-04-12 03:34:02       36 阅读
  2. 回调函数详细介绍(C & C++代码实例)

    2024-04-12 03:34:02       40 阅读
  3. Codeforces Round 515 (Div. 3)

    2024-04-12 03:34:02       33 阅读
  4. Python 推导式介绍

    2024-04-12 03:34:02       32 阅读
  5. 爬虫 xpath基础

    2024-04-12 03:34:02       37 阅读
  6. 栈中的中缀表达式转变为后缀表达式

    2024-04-12 03:34:02       34 阅读
  7. 【综合分析类】校园霸凌

    2024-04-12 03:34:02       36 阅读
  8. 练习4-10 找出最小值

    2024-04-12 03:34:02       29 阅读
  9. sqlplus / as sysdba下中文乱码问题

    2024-04-12 03:34:02       35 阅读
  10. DBA常用命令:数据导出和数据导入

    2024-04-12 03:34:02       29 阅读
  11. 鸿蒙原生应用开发-网络管理Socket连接(三)

    2024-04-12 03:34:02       37 阅读