高级IO:

五种典型IO:

阻塞IO/非阻塞IO/信号驱动IO/异步IO/IO多路转接
IO多路转接模型:select/poll/epoll

五种典型IO

阻塞IO

IO操作的流程:等待IO操作条件具备,然后进行数据拷贝
为了完成IO操作发起调用,若当前不具备IO操作条件,则等待,直到条件具备,完成IO操作后调用返回

钓鱼的时候,手里一直握着鱼竿,等待?上钩。

非阻塞IO

为了完成IO操作发起调用,若当前不具备IO操作条件,则立即报错返回;可以干点其他的事情,循环过来进行判断

把鱼竿放下去,去做其他事情,隔一段时间过来看一次,缺点:回来时?跑了。所以出现信号驱动IO
非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询. 这对CPU来说是较大的浪费, 一 般只有特定场景下才使用.

信号驱动IO

提前对IO信号自定义处理方式,当IO条件具备时,操作系统通过信号通知进程,这时候IO条件已经具备,直接发起调用进行数据拷贝

钓鱼的时候,抛出鱼竿,在鱼竿上绑上一个铃铛,如果?咬钩了,就能及时知道了

异步IO

IO操作条件的等待与数据拷贝都由操作系统来进行等待与操作,等到IO操作完成后,通过信号通知进程,进程直接对数据进行操作

钓鱼的时候,抛出鱼竿,找个人帮你钓鱼,调到?了,叫一下你

总结

IO几种操作中,IO操作效率越来越高,但是流程控制越来越复杂

高级IO重要概念

阻塞与非阻塞

  • 阻塞:当前不具备操作条件时,调用挂起等待,直到条件具备,完成操作后调用返回
  • 非阻塞:当前不具备操作条件,调用直接报错返回
  • 阻塞与非阻塞:关注的并不是操作是否完成,而是调用是否立即返回

同步通信 vs 异步通信

同步:当前不具备操作条件时,调用挂起等待,直到条件具备,完成操作后调用返回
异步:发起操作的调用,这个操作并不由自己完成,由别人完成
同步与异步:关注的是操作是否由自己完成
同步通常是阻塞的;但是异步有阻塞也有非阻塞

  • 异步阻塞:发起调用完成功能,功能由操作系统完成,但是进程自身一直等待操作系统完成完成,完成之后返回

  • 异步非阻塞:发起调用完成功能,功能由操作系统完成,进程自身立即返回

  • 所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回. 但是一旦调用返回,就得 到返回值了; 换句话说,就是由调用者主动等待这个调用的结果;

  • 异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果; 换句话说,当一个异步 过程调用发出后,调用者不会立刻得到结果; 而是在调用发出后,被调用者通过状态、通知来通知调用 者,或通过回调函数处理这个调用.

同步和异步关注的是消息通信机制.

了解Linux下的AIO—异步IO

https://blog.csdn.net/brucexu1978/article/details/7085924

IO多路转接/IO多路复用

对大量描述符进行事件监控(可读事件/可写事件/异常事件)监控

作用
  • 前边基本的tcp服务器只能与一个客户端通信一次
  • 因为服务器端不知道新的客户端连接请求以及客户端数据什么时候到来,因此程序流程只能写死,导致程序会卡死在accept/recv这里
  • 假设服务端若是知道什么时候新的客户端连接起来,这时候再调用accept;程序流程就不会卡再accept这里,假若服务端知道什么时候客户端的数据到来,然后再进行recv,程序流程就不会卡在recv这里
  • 这时候服务端就可以实现并发操作,谁有数据到来就操作谁,否则不进行操作
IO多路转接

替进程监控大量描述符什么时候有什么事件,进而进程可以针对发生了相应事件的描述符进行相应操作;

IO多路转接模型
  • select
  • poll
  • epoll

高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)相关推荐

  1. 阻塞和非阻塞、同步和异步 、五种IO模型

    阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水 ...

  2. 程序员成长之旅——同步IO和异步IO(五种IO模型)

    程序员成长之旅--同步IO和异步IO(五种IO模型) 同步和异步 同步 异步 消息通知 场景比喻 阻塞和非阻塞 阻塞 非阻塞 事例 同步IO 阻塞IO 非阻塞IO 信号驱动IO 多路转接IO 异步IO ...

  3. 2. 彤哥说netty系列之IO的五种模型

    你好,我是彤哥,本篇是netty系列的第二篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别. ...

  4. IO:同步,异步,阻塞,非阻塞

    IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...

  5. 【Linux网络编程学习】阻塞、非阻塞、同步、异步以及五种I/O模型

    文章目录 1. 基本概念 1.1 阻塞与非阻塞 1.2 同步与异步 1.3 为什么没有"异步阻塞" 2. 五种IO模型 2.1 阻塞 blocking 2.2 非阻塞 non-bl ...

  6. Linux IO - 同步,异步,阻塞,非阻塞

    From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...

  7. 网络IO之阻塞、非阻塞、同步、异步总结

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

  8. IO模型(阻塞,非阻塞,多路复用)

    在了解IO模型前,先了解什么叫IO,IO得操作是怎么样的? IO既输入输出,指的是一切操作程序或设备与计算机之间发生的数据传输的过程.它分为IO设备和IO接口两个部分. IO设备:就是指可以与计算机进 ...

  9. JAVA 中IO总结 之前篇阻塞、非阻塞

    最近总结JAVA中的IO,遇到了有关阻塞.非阻塞.同步.异步的概念,之前也做个内核有关开发,今天温故而知新. Linux支持同步IO,也支持异步IO,因此分为同步阻塞.同步非阻塞,异步阻塞,异步非阻塞 ...

最新文章

  1. centos mysql卸载重装_提高性能,MySQL 读写分离环境搭建
  2. python快速部署一个服务器_Python加Shell快速部署集群
  3. 类DefaultWsdl 11定义中英文对比API文档
  4. Laravel-admin添加模型路由报错出现问题:Model does not exists !
  5. 【RK3399Pro学习笔记】一、Thinker Edge R 安装系统和VNC服务
  6. nodejs轻量服务器后端
  7. linux发挥不出显卡性能,Ubuntu 9.04 显卡性能不佳问题的解决
  8. hacs增加源_基于病案首页加强对医院获得性问题的管理
  9. 添加负载机_从 Coco 转向 Koko,Jumpserver 堡垒机 V1.5.3 发布
  10. 【脑电信号】基于matlab小波变换睡眠脑电信号监测【含Matlab源码 595期】
  11. python函数手册(1)
  12. OpenDDS 安全配置
  13. mysql 修改表的编码_Mysql表编码查看修改
  14. 使用Java生成验证码
  15. PayPal WebHook事件异步通知
  16. Pytorch测试模型的GFLOPs和Param大小
  17. Wireshark从入门到精通(进阶篇)
  18. AWS亚马逊服务器配置过程
  19. 一个 Spring Boot 面试题
  20. 福州大学计算机学院李敏,副教授(副研究员) - 福州大学机械工程及自动化学院...

热门文章

  1. codefroces 297E Mystic Carvings
  2. linux里的进程简介
  3. 插件开发-UI插件开发
  4. 判断滚动条是否到达页面的尾部
  5. android媒体播放框架,Android 使用超简单的多媒体播放器JiaoZiVideoPlayer
  6. java中i+=2什么意思_三分钟看懂Java中i++与++i的性能差别以及循环中如何使用
  7. 云耀服务器切换系统,【计算】云耀服务器-常见操作汇总指南
  8. 西安4年java多少时间_西安学习java一般要多久
  9. ubantu下安装Nginx
  10. Win32ASM学习[23]:RadASM快捷键