网络IO模型详细分析
截取自【原文链接】
常见的IO模型有阻塞、非阻塞、IO多路复用,异步。以一个生动形象的例子来说明这四个概念。周末我和女友去逛街,中午饿了,我们准备去吃饭。周末人多,吃饭需要排队,我和女友有以下几种方案:
(1)我和女友点完餐后,不知道什么时候能做好,只好坐在餐厅里面等,直到做好,然后吃完才离开。
女友本想还和我一起逛街的,但是不知道饭能什么时候做好,只好和我一起在餐厅等,而不能去逛街,直到吃完饭才能去逛街,中间等待做饭的时间浪费掉了。这就是典型的阻塞。网络中IO阻塞如下图所示:
(2)我女友不甘心白白在这等,又想去逛商场,又担心饭好了。所以我们逛一会,回来询问服务员饭好了没有,来来回回好多次,饭都还没吃都快累死了啦。这就是非阻塞。需要不断的询问,是否准备好了。网络IO非阻塞如下图所示:
(3)与第二个方案差不多,餐厅安装了电子屏幕用来显示点餐的状态,这样我和女友逛街一会,回来就不用去询问服务员了,直接看电子屏幕就可以了。这样每个人的餐是否好了,都直接看电子屏幕就可以了,这就是典型的IO多路复用,如select、poll、epoll。网络IO具体模型如下图所示:
(4)女友不想逛街,又餐厅太吵了,回家好好休息一下。于是我们叫外卖,打个电话点餐,然后我和女友可以在家好好休息一下,饭好了送货员送到家里来。这就是典型的异步,只需要打个电话说一下,然后可以做自己的事情,饭好了就送来了。linux提供了AIO库函数实现异步,但是用的很少。目前有很多开源的异步IO库,例如libevent、libev、libuv。异步过程如下图所示:
网络IO模型详细分析相关推荐
- linux 网络io命令详解,Linux下五种网络IO模型详解
本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...
- 网络IO模型的深入浅出
标题索引 追溯IO原因 网络数据流 网络IO模型 IO模型举例 追溯IO原因 从事项目多年来,有个问题一直困扰着我,但因种种原因一直没有翻阅资料去释怀,随着项目经历的增加.年龄的增长和责任的使 ...
- Linux五种IO模型性能分析
转载:http://blog.csdn.net/jay900323/article/details/18141217 Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...
- Linux 网络 IO 模型
写在前面 本文主要介绍 Unix/Linux 下五种网络 IO 模型,但是.为了更好的理解下面提到的五种网络 IO 的概念,我们有必要先理清下面这几个概念. 用户空间与内核空间 一个计算机通常有一定大 ...
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
- python 网络编程 异步io_python网络编程——网络IO模型
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...
- C++后台开发—网络IO模型与Reactor模式
一.三种网络IO模型: 分类: BIO 同步的.阻塞式 IO NIO 同步的.非阻塞式 IO AIO 异步非阻塞式 IO 推荐视频: C++架构师学习地址:C/C++Linux服务器开发高级架构师/L ...
- 网络编程(三):Linux 网络IO模型、select、pool、epoll 内核设计
Linux网络IO模型 同步和异步,阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步: 同步的意思就是调用方需要主动等待结果的返回 异步: 异步的意思就是不需要主动等待结果的返回,而是通 ...
- 五种网络IO模型详解
一 IO操作本质 数据复制的过程中不会消耗CPU # 1 内存分为内核缓冲区和用户缓冲区 # 2 用户的应用程序不能直接操作内核缓冲区,需要将数据从内核拷贝到用户才能使用 # 3 而IO操作.网络请求 ...
最新文章
- applicationcontext获取bean_Spring IoC之ApplicationContext
- PHP5 VC9、VC6、Thread Safe、Non Thread Safe各个版本区别
- 细细品味C#——Socket编程专题
- 苹果:给你36亿,帮我造车
- VC安装证书到指定CSP
- 9个不为人知的Python技巧
- 关于java中Scanner的next和nextLine
- 最受欢迎中国技术博客? 我才狂写4周唉
- 2019.8.13 sdfzoier
- lcs文本相似度_具有LCS方法的通用文本比较工具
- (HY000): Cannot modify @@session.sql_log_bin inside a transaction
- 第一章 计算机系统概述 1.2.3 计算机的多级层次结构 [计算机组成原理笔记]
- java怎么配置哨兵模式_redis 哨兵模式配置与spring集成
- hdu 2034 - 集合操作
- JS中,如何判断一个被转换的数是否是NaN
- mysql分页是物理分页_学习MySQL:什么是分页
- ThinkPHP自定义404页面
- 开漏输出和推挽输出的区别?
- 如何快速统计考勤(bushi)
- VS2010 C++单元测试之gtest与OpenCppCoverage实践