通俗理解IO模型

Posted 翔哥的技术分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通俗理解IO模型相关的知识,希望对你有一定的参考价值。

       IO模型包括阻塞式,非阻塞式,IO多路复用,以及同步和异步IO 。这些场景通常决定着系统的高并发能力,理解这些技术需要花费很多心血去阅读网络及通信的原理,但今天我以一种通俗化的方式来理解它的相关概念和原理,起到一个抛砖引玉的作用。

     

      好比去一家餐厅吃饭,服务员对客户们进行服务,例如端茶,倒水上菜等等动作。这些动作即如何处理一个网络事件。这个过程式理论上不被打断的。例如给一个客人服务的时候,没法给另一个客户服务。也就是处理完头的事情再去处理其他事情。


 1、 阻塞式IO

       当从你进店的时候就分配一个服务员1对1 服务,直到吃完埋单走人,这个服务员才能去接待另一个。这就是所谓的高级VIP享受嗯。但这个成本就很高了额,老板受不起。


2、非阻塞式IO

        让服务员每隔几分钟不停询问,你需要服务嘛,你要喝水嘛,你要舔饭嘛?这样一个服务员好像是能多管理几个桌子了。但是,服务员可累了一直在做无用功,还不受待见。


3、IO多路复用

       老板觉得这样效率太低了,于是每个顾客进门的时候给了一个叫号器,顾客需要服务的时候就按一下,服务员收到通知后去给有需要处理的顾客服务。这样就能保证一个服务员能够管理一大片区域,而且仅在有需要的时候才做事。


4、同步IO

      同步IO有点像去食堂打饭,一个人进入食堂的时候,服务员给你服务后结束。


5、异步IO

       

       优秀的高并发场景一直是各系统架构师追求的目标。例如nginx,redis这样的workload,以及libevent这样的高性能事件事件通知库,得益于IO多路复用技术。

        举的例子仅仅是一个通俗化的解释,实际理解其中的奥妙需要我们仔细阅读相关文档。最后,让我们来看看5种IO模式的示意图吧。


以上是关于通俗理解IO模型的主要内容,如果未能解决你的问题,请参考以下文章

聊聊 Linux 中的五种 IO 模型

图解四种 IO 模型

理解网络IO模型

从实践中理解IO模型

(转载) Linux五种IO模型

Linux系统编程——深度理解5种IO模型