美文网首页
异步 IO 的好处

异步 IO 的好处

作者: 柏丘君 | 来源:发表于2018-01-12 11:27 被阅读0次

上篇文章中,分析了几种任务处理模型:单线程阻塞 IO、多线程非阻塞 IO 和单线程非阻塞 IO 的性能,并画出了简单的流程图。
同时,为了简化理解,在场景模拟中给出了一个限定条件:请求分析、IO 读取和响应处理的耗时各位 1ms,那这个设定是不是合理的呢?

IO类型和花费的CPU时钟周期.png
上图展示了不同的 IO 操作所占用的 CPU 时钟周期,在计算机中,CPU 的运算速度最快,以其的运算速度为基准,时钟周期为1。其次是一级缓存、二级缓存和内存,硬盘和网络最慢,它们所花费的时钟周期和内存所花费的时钟周期差距在五位数以上,更不用提跟 CPU 和一级缓存、二级缓存的差距了。
注:CPU 时钟周期的计算公式为:
CPU 时钟周期 = 1s / CPU 主频

因此,我们在场景模拟中的限定是有问题的:CPU 运算的时间其实远远小于数据库 IO 读写的时间,正确的流程图应该像这样:


请求流程.png

如果采用阻塞式的 IO,CPU 将空闲相当长的时间等待 IO 操作完成,性能浪费严重。在这个模型下,如果进行 IO 操作 A 花费是时间为 M,进行 IO 操作 B 花费的时间为 N,那么在 IO 上花费的时间就为 (M + N + ...)。可见,同步式(阻塞式)IO 的代价是十分昂贵的。

分布式 IO

前面说到,阻塞式 IO 的代价是昂贵的,对于分布式架构而言,阻塞式 IO 的代价更加昂贵,先看下面两个流程图:


非分布式 IO.png 分布式IO.png

当网站越来越大,我们就会引入静态资源 CDN、服务器集群和数据库集群,这就构成了一分布式的 IO,相比于将所有的资源放在一台服务器上,分布式 IO 增加了一层网络请求和磁盘读写(可以从花费 CPU 时钟周期的角度看),这种情况下如果还采用阻塞式 IO,其代价将会大的让别的男人伤心。

异步 IO 的好处

对于异步 IO 来说,情况就好得多,还是以上面 A 和 B 两个 IO 操作为例,如果采用异步 IO,那么在 IO 操作上的耗时就为 MAX(M,N,...),相比于阻塞式 IO,其代价简直小的让别的男人开心。
在并发量较小的情况下,阻塞式 IO 和异步 IO 的差距可能不是那么明显,但随着并发量的增加,异步 IO 的优势将会越来越大,吞吐率和性能上的差距也会越来越明显。

完。

相关文章

  • NodeJS基础原理

    NodeJS基础原理 异步IO原理浅析及优化方案 异步IO的好处(输入输出input output) 前端通过异步...

  • 异步 IO 的好处

    上篇文章中,分析了几种任务处理模型:单线程阻塞 IO、多线程非阻塞 IO 和单线程非阻塞 IO 的性能,并画出了简...

  • 理解与实现(by Python)JS event loop

    为什么需要event loop 因为: 需要用event loop来实现异步IO(回调函数的方式)。异步IO的好处...

  • Java IO快速入门

    网络IO实现方式分为BIO(阻塞IO)、线程池伪异步IO、NIO(非阻塞IO)、AIO(异步非阻塞IO); 异步、...

  • 前端进阶全栈-Node的异步IO

    本文力图详尽解释node的异步IO: 异步IO的产生背景 Node中的异步IO具体的实现 非I/O的异步API 一...

  • Reactor 与Proactor

    按照posix标准,系统io分为同步io和异步io两种,其中同步io常用的是bio nio。异步io有aio。 从...

  • nodejs深入学(5)异步编程

    前言 上一章讲解了node如何通过事件循环实现异步,包括与各种IO多路复用搭配实现的异步IO已经与IO无关的异步A...

  • IO模型

    原文参考链接 四种状态 同步 异步 阻塞 非阻塞 IO分类 同步阻塞IO 同步非阻塞IO 异步非阻塞IO注意: 没...

  • 异步IO

    摘自廖雪峰教程 在IO编程一节中,我们已经知道,CPU的速度远远快于磁盘、网络等IO。在一个线程中,CPU执行代码...

  • 异步IO

    为什么要异步IO node的事件循环 在进程启动时,node会创建一个类似于while的循环,每执行一次循环体就是...

网友评论

      本文标题:异步 IO 的好处

      本文链接:https://www.haomeiwen.com/subject/cuixoxtx.html