1、阻塞I/O模型:最常用的I/O模型就是阻塞I/O模型。我们以套接字接口为例来讲解此模型,在进程空间中调用recvfrom,其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误是才返回,在此期间一直会等待,进程在从调用recvfrom开始到它返回的整段时间内都是阻塞的,因为被称为阻塞I/O模型。如图1-1所示

2、非阻塞I/O模型:recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,一般都对非阻塞I/O模型进行轮询检查这个状态,看内核是不是有数据到来,如图1-2所示

3、I/O复用模型:Linux提供select/poll,进程通过将一个或者多个fd传递给select或者poll系统调用,阻塞在select操作上,这样select/poll可以帮我们侦测多个fd是否处于就绪状态。select/poll是顺序扫描fd是否就绪,而且支持的fd数量有限,因为它的使用受到一些制约。Linux还提供了epoll系统调用,epoll使用基于事件驱动的方式代替顺序扫描,因此性能更高。当有fd就绪的时候,立即调用回调函数,如图1-3所示

4、信号启动I/O模型:首先开启套接字信号驱动I/O功能,并通过系统调用sigaction执行一个信号处理函数(此系统调用立即返回,进程继续工作,它是非阻塞)。当数据准备就绪的时,就为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据,并通知主循环函数处理数据,如图1-4所示

5、异步I/O:告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓冲区)通知我们。这种模型与信号驱动模型的主要区别是:信号驱动I/O由内核通知我们何时可以开始一个I/O操作;异步I/O模型由内核通知我们I/O操作何时完成,如图1-5所示

UNIX网络编程的5种IO模型相关推荐

  1. Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型

    Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...

  2. 网络编程的5种IO模型

    五种IO模型 一. 五种IO模型 ①. 同步阻塞I/O(BIO) ②. 同步非阻塞I/O(NIO) ③. IO多路复用 ④. 信号驱动IO(SIGIO) ⑤. 异步IO(AIO) 一. 五种IO模型 ...

  3. c++中recvfrom函数_通俗易懂:快速理解网络编程中5种IO模型

    关于IO模型,就必须先谈到几个日常接触的几个与IO相关名字:同步,异步,阻塞,非阻塞. 名词解释 同步 如果事件A需要等待事件B的完成才能完成,这种串行执行机制可以说是同步的,这是一种可靠的任务序列, ...

  4. 网络编程的4种IO模型

    select FD_ZERO初始化 FD_SET将socket加进去 select轮询 当socket的事件发生时,fd_set里面有相关的socket,如果没有socket有事件发生,select返 ...

  5. Unix/Linux编程:通用的IO模型

    概述 所有执行IO操作的系统调用都以文件描述符,一个非负整数(通常是小整数)来指代打开的文件 文件描述符用以表示所有类型的已打开文件,包括管道.FIFO.socket.终端.设备和普通文件 针对每个进 ...

  6. Linux/Unix五种IO模型

    文章目录 引入 操作系统的内核态和用户态 文件描述符fd IO操作过程: 阻塞和非阻塞 同步和异步 同步IO和异步IO 五种IO模型 1.(同步)阻塞IO模型 2.(同步)非阻塞IO模型 3.IO多路 ...

  7. 说说基于网络的五种IO模型

    # django不是一个异步框架 # tornado是异步的web框架# 处理每秒大量的请求# 个人理解的IO:就是应用层与内核驱动层的交互,这个过程无论从应用层到内核中,还是驱动层等待硬件层的数据, ...

  8. Linux 下的五种 IO 模型

    Linux 下的五种 IO 模型 来源:decaywood's Blog 概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2 ...

  9. 聊聊 Linux 中的五种 IO 模型

    聊聊 Linux 中的五种 IO 模型 2016/04/21 · IT技术 · 8 评论 · iO, 同步, 异步, 阻塞, 非阻塞 分享到:0 本文作者: 伯乐在线 - 陶邦仁 .未经作者许可,禁止 ...

  10. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

最新文章

  1. C语言中的字符串处理
  2. 这个奇葩打字外设火了,一分钟500词比说话还快,直接被打字比赛禁用
  3. APUE读书笔记-16网络通信-08非阻塞和异步IO
  4. ruby中的self
  5. java tick_Java中的Clock tick()方法
  6. assubclass_Java类class asSubclass()方法及示例
  7. python与javascript的区别_python与js区别有哪些
  8. 神奇的python(一)之python脚本调用shell常用方法
  9. Spark高级操作之json复杂和嵌套数据结构的操作
  10. nginx 平滑升级
  11. mybatis入门教程(F)
  12. idea Terminal配置cmder(增加nodejs,git配置,jdk本地环境)
  13. 使用dialog插件弹出提示和确定信息对话框8-8
  14. win7系统怎么用计算机,win7电脑配置怎么查看_win7系统查看电脑配置的方法
  15. HeidiSQL使用教程
  16. SQL Server 查询分析器提供的所有快捷方式(快捷键)
  17. 药方的量化方法笔记(学习与尝试):第一回 中药材数据库的建立 归经的统计 药方归经和功效的量化拆解
  18. Is not configured
  19. 坐标正反算通用程序(极短篇)
  20. PQ节点-PV节点-平衡节点

热门文章

  1. jsp java session_JSP Session
  2. comsol光学仿真02
  3. maven下载及安装教程(保姆及教程)
  4. 直流稳压电源设计(单相)_电力电子课程设计
  5. Spice Windows Client 利用 USBDk 实现USB重定向
  6. python切片详解_python切片及sys.argv[]用法详解
  7. 使用dom4j把XML文件解析成JavaBean
  8. 2021美亚杯第七届中国电子数据取证团体赛题目详解write up
  9. HTML开发者工具抓取所有图片,利用开发者工具,截取网页高清长图
  10. java集合试题_java集合练习题及答案.doc