概念

同步IO

  • 在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。
  • 在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。

多线程多进程的解决思路

  • 因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。
  • 多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。

其他解决方案异步IO

  • 多线程和多进程只是解决这一问题的一种方法。
  • 另一种解决IO问题的方法是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。
  • 异步IO模型需要一个消息循环,在消息循环中,主线程不断地重复“读取消息-处理消息”这一过程

消息模型是如何解决同步IO必须等待IO操作这一问题的呢?

  • 当遇到IO操作时,代码只负责发出IO请求,不等待IO结果,然后直接结束本轮消息处理,进入下一轮消息处理过程。当IO操作完成后,将收到一条“IO完成”的消息,处理该消息时就可以直接获取IO操作结果。
  • 在“发出IO请求”到收到“IO完成”的这段时间里,同步IO模型下,主线程只能挂起,但异步IO模型下,主线程并没有休息,而是在消息循环中继续处理其他消息。这样,在异步IO模型下,一个线程就可以同时处理多个IO请求,并且没有切换线程的操作。对于大多数IO密集型的应用程序,使用异步IO将大大提升系统的多任务处理能力。

一个通俗易懂的例子

老张爱喝茶

  • 1 老张把水壶放到火上,立等水开。(同步阻塞)
  • 2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
  • 3 老张把响水壶放到火上,立等水开。(异步阻塞) (水开之后,能大声发出嘀~~~~的噪音。),这样没有意义
  • 4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

所谓同步异步,只是对于水壶而言。 普通水壶,同步;响水壶,异步。 虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。 同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。 立等的老张,阻塞;看电视的老张,非阻塞。 情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

传送门

通俗理解同步IO\异步IO相关推荐

  1. 【好记性不如烂笔头】IO之深入理解同步、异步、阻塞、非阻塞

    IO之深入理解同步.异步.阻塞.非阻塞 一.什么是同步? 二.什么是异步? 什么是阻塞? 什么是非阻塞? 总结 一.什么是同步? 先简单画一个图再解释: 我打算做番茄炒蛋,于是我去街上买点西红柿买点鸡 ...

  2. 阻塞IO, 非阻塞IO, 同步IO,异步IO

    阻塞IO, 非阻塞IO, 同步IO,异步IO 介绍 先说明几个概念 用户空间与内核空间 为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间(内存)划分为两部分,一部分 ...

  3. 计算机网络(6) ——同步IO/异步IO专题

    计算机网络(6) --同步IO/异步IO专题 文章目录 理解性记忆 计算机网络(6) --同步IO/异步IO专题 1.同步IO 2.异步IO 理解性记忆 计算机网络(6) --同步IO/异步IO专题 ...

  4. 从小白到高手,你需要理解同步与异步(内含10张图)

    这篇文章中我们来讨论一下到底什么是同步,什么是异步,以及在编程中这两个极为重要的概念到底意味着什么. 相信很多同学遇到同步异步这两个词的时候大脑瞬间就像红绿灯失灵的十字路口一样陷入一片懵逼的状态: 是 ...

  5. 从根上理解高性能、高并发(四):深入操作系统,彻底理解同步与异步

    本文原题"从小白到高手,你需要理解同步与异步",转载请联系作者. 1.系列文章引言 1.1 文章目的 作为即时通讯技术的开发者来说,高性能.高并发相关的技术概念早就了然与胸,什么线 ...

  6. 五种网络IO模型:阻塞式IO 非阻塞式IO IO复用(IO multiplexing) 信号驱动式IO 异步IO

    文章目录 五种网络IO模型 举例说明 阻塞式I/O模型 非阻塞式I/O I/O多路复用 信号驱动式I/O 异步I/O 比较结果 总结 同步 异步 阻塞 非阻塞 阻塞/非阻塞: 同步/异步: 举例子:小 ...

  7. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO

    Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...

  8. IO复用\阻塞IO\非阻塞IO\同步IO\异步IO

    本文是对<UNIX网络编程卷1>第6章的总结. 一.            什么是IO复用? 它是内核提供的一种同时监控多个文件描述符状态改变的一种能力:例如当进程需要操作多个IO相关描述 ...

  9. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  10. Linux--同步IO/异步IO区别

    基本IO模型▼ 同步必须等待或者主动的去询问IO是否完成,完成后才能继续执行其他操作: 异步不需要等待结果就可以执行其他操作,比如常见的中断: 同步-阻塞 IO模型▼ 用户进程在发起一个IO操作以后, ...

最新文章

  1. COMVariantType的Date类型
  2. 成天说要删库跑路,这次真的有人干了
  3. 纯前端H5小应用_localStorage存储
  4. iframe超出外层元素显示滚动条怎么办?
  5. 对于出差的看法_我对于挑选背包的一些小建议
  6. eclipse中修改内存
  7. 小白初学MySQL----Win7下关于安装和初步使用~
  8. Spark分布式安装
  9. apr_thread使用内存之谜
  10. 拟推荐全省文物系统先进_文物系统突出贡献先进个人事迹材料
  11. 博士阶段能学到什么硕士学不到的东西?
  12. python飞机大战加背景音乐_Python飞机大战实例有感——pygame如何实现“切歌”以及多曲重奏?...
  13. 系统盘清理,便携小助手一键清理系统垃圾
  14. ForkJoinPool api 详解
  15. 怎么获取微信公众号的音频视频
  16. 什么时候使用Redis缓存
  17. 鸿蒙OS开源代码精要解读之——init
  18. Microsoft Visual Studio 13强力卸载
  19. 真实故事:他用了3天时间写个程序,日入30万
  20. 《数据库系统概论》学习笔记

热门文章

  1. 蓝屏dump分析教程,附分析工具WinDbg(x86 x64)6.12.0002.633下载
  2. sql server代码创建数据库详细过程
  3. 网易云音乐评论加密解析
  4. 红帽考试环境之RHCSA
  5. uniapp中使用colorUI说明文档
  6. 使用Matlab产生m序列(PN序列的一种)
  7. quartus-ModeliSm仿真教程
  8. Qt网络编程、tcp通信、文件传输、程序打包和图标设置(QT五)
  9. html5 如何打包成apk,将H5封装成android应用APK文件的几种方法
  10. ubuntu下使用锐捷客户端连接校园网-郑州大学Ruijieclient for Linux下载及配置指导...