截取自【原文链接】

常见的IO模型有阻塞、非阻塞、IO多路复用,异步。以一个生动形象的例子来说明这四个概念。周末我和女友去逛街,中午饿了,我们准备去吃饭。周末人多,吃饭需要排队,我和女友有以下几种方案:

  (1)我和女友点完餐后,不知道什么时候能做好,只好坐在餐厅里面等,直到做好,然后吃完才离开。

女友本想还和我一起逛街的,但是不知道饭能什么时候做好,只好和我一起在餐厅等,而不能去逛街,直到吃完饭才能去逛街,中间等待做饭的时间浪费掉了。这就是典型的阻塞。网络中IO阻塞如下图所示:

  (2)我女友不甘心白白在这等,又想去逛商场,又担心饭好了。所以我们逛一会,回来询问服务员饭好了没有,来来回回好多次,饭都还没吃都快累死了啦。这就是非阻塞。需要不断的询问,是否准备好了。网络IO非阻塞如下图所示:

  (3)与第二个方案差不多,餐厅安装了电子屏幕用来显示点餐的状态,这样我和女友逛街一会,回来就不用去询问服务员了,直接看电子屏幕就可以了。这样每个人的餐是否好了,都直接看电子屏幕就可以了,这就是典型的IO多路复用,如select、poll、epoll。网络IO具体模型如下图所示:

  (4)女友不想逛街,又餐厅太吵了,回家好好休息一下。于是我们叫外卖,打个电话点餐,然后我和女友可以在家好好休息一下,饭好了送货员送到家里来。这就是典型的异步,只需要打个电话说一下,然后可以做自己的事情,饭好了就送来了。linux提供了AIO库函数实现异步,但是用的很少。目前有很多开源的异步IO库,例如libevent、libev、libuv。异步过程如下图所示:

网络IO模型详细分析相关推荐

  1. linux 网络io命令详解,Linux下五种网络IO模型详解

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...

  2. 网络IO模型的深入浅出

    标题索引 追溯IO原因 网络数据流 网络IO模型 IO模型举例 追溯IO原因     从事项目多年来,有个问题一直困扰着我,但因种种原因一直没有翻阅资料去释怀,随着项目经历的增加.年龄的增长和责任的使 ...

  3. Linux五种IO模型性能分析

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...

  4. Linux 网络 IO 模型

    写在前面 本文主要介绍 Unix/Linux 下五种网络 IO 模型,但是.为了更好的理解下面提到的五种网络 IO 的概念,我们有必要先理清下面这几个概念. 用户空间与内核空间 一个计算机通常有一定大 ...

  5. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  6. python 网络编程 异步io_python网络编程——网络IO模型

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...

  7. C++后台开发—网络IO模型与Reactor模式

    一.三种网络IO模型: 分类: BIO 同步的.阻塞式 IO NIO 同步的.非阻塞式 IO AIO 异步非阻塞式 IO 推荐视频: C++架构师学习地址:C/C++Linux服务器开发高级架构师/L ...

  8. 网络编程(三):Linux 网络IO模型、select、pool、epoll 内核设计

    Linux网络IO模型 同步和异步,阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步: 同步的意思就是调用方需要主动等待结果的返回 异步: 异步的意思就是不需要主动等待结果的返回,而是通 ...

  9. 五种网络IO模型详解

    一 IO操作本质 数据复制的过程中不会消耗CPU # 1 内存分为内核缓冲区和用户缓冲区 # 2 用户的应用程序不能直接操作内核缓冲区,需要将数据从内核拷贝到用户才能使用 # 3 而IO操作.网络请求 ...

最新文章

  1. applicationcontext获取bean_Spring IoC之ApplicationContext
  2. PHP5 VC9、VC6、Thread Safe、Non Thread Safe各个版本区别
  3. 细细品味C#——Socket编程专题
  4. 苹果:给你36亿,帮我造车
  5. VC安装证书到指定CSP
  6. 9个不为人知的Python技巧
  7. 关于java中Scanner的next和nextLine
  8. 最受欢迎中国技术博客? 我才狂写4周唉
  9. 2019.8.13 sdfzoier
  10. lcs文本相似度_具有LCS方法的通用文本比较工具
  11. (HY000): Cannot modify @@session.sql_log_bin inside a transaction
  12. 第一章 计算机系统概述 1.2.3 计算机的多级层次结构 [计算机组成原理笔记]
  13. java怎么配置哨兵模式_redis 哨兵模式配置与spring集成
  14. hdu 2034 - 集合操作
  15. JS中,如何判断一个被转换的数是否是NaN
  16. mysql分页是物理分页_学习MySQL:什么是分页
  17. ThinkPHP自定义404页面
  18. 开漏输出和推挽输出的区别?
  19. 如何快速统计考勤(bushi)
  20. VS2010 C++单元测试之gtest与OpenCppCoverage实践

热门文章

  1. 一文读懂 IPv4 到 IPv6 的过渡技术
  2. Go:获取命令行参数
  3. Ruby 101:重用、隐藏和多态
  4. 29岁年薪百万,晋升阿里最年轻P8之一,我想分享8点成长经验
  5. .Net MVC Cache 缓存技术总结
  6. OpenSsl工具的介绍
  7. Vantage公司增资3亿美元加强数据中心建设
  8. maven的仓库、生命周期与插件
  9. WCF性能优势体现 【转】
  10. 【云快讯】之五十五《IBM推出Data Warehouse数据仓库云服务》