`
mmdev
  • 浏览: 12919288 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

unix编程---网络I/O模型

 
阅读更多

1.阻塞I/O模型与非阻塞I/O模型



阻塞与非阻塞的模型主要区别是:阻塞I/O模型中用户进程在能读取数据之前会进入睡眠或者挂起状态;而非阻塞情况下遇到读取数据失败时内核直接返回错误信号,用户进程便在成功返回数据之前一直在调用recv操作询问数据可读性,因此这种情况也成为轮询机制。

这两种过程就好比如:一位大伯住在某一栋楼,一楼有他的邮箱,他可以选择两种方式去取他的邮件,一种是跑到一楼去等他的邮件,直到有邮件来了他才跑回自己的住房;一种是跑到一楼后发现没有新邮件,他便跑回自己的住房,然后又跑下来看有没有新邮件,没有的话又跑回去…如此反复的爬上爬下直到有新的邮件来为止。前者是阻塞模型,后者对应非阻塞模型。

2. I/O复用


如图,与阻塞I/O模型相比,I/O复用不是阻塞在整个I/O的系统调用过程。I/O复用实现了多个连接或者多种连接(TCP,UDP等)共用了同一种等待机制:slelect会返回某个连接的可读条件,调用recv/recvfrom把所读的数据报拷贝到应用进程的缓冲区中。

这个过程就好比如在一个小区的邮件收发室中,当有新的邮件到达时,收发室的值班员会通知相应的人来领取这个邮件。

3.信号驱动I/O模型


这种情况下主要是通过sigaction系统调用实现了SIGIO信号的捕获与处理函数。该模型的优点是在等待数据报到达期间,用户进程可以不被阻塞,主循环可以继续执行,只要等待来及信号处理函数的通知;当信号到达时系统便开始调用一个I/O操作(调用recv/recvfrom)。

4.异步I/O模型


由上图可知,异步I/O模型与信号驱动模型的主要区别是:前者是由内核通知用户进程I/O操作何时完成,而后者是内核通知用户进程何时去启动I/O操作(即是进程所等待的数据是停留在内核还是在进程缓冲区时变发送信号的区别)。这个区别也好比如是:一种是邮件收发室的值班员通知住户来收发室拿邮件,另一种是直接把邮件拿到住户的住处再让住户开门拿邮件。

分享到:
评论

相关推荐

    UNIX环境高级编程

    目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 ... 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。

    unix环境编程电子书

    守护进程 341 13.1 引言 341 13.2 守护进程的特征 341 13.3 编程规则 342 13.4 出错记录 345 13.5 单实例守护进程 348 13.6 守护进程的惯例 350 13.7 客户进程-服务器进程模型 354 13.8 小结 354 ...

    UNIX环境高级编程_第2版.part2

     关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在  此基础上介绍了多个应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附  录中给...

    浅谈Linux 网络 I/O 模型简介(图文)

    根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模型。 1.1、阻塞I/O模型 最常用的I/O模型,默认情况下,所有文件操作都是阻塞的。 比如I/O模型下的套接字接口:在进程空间中调用recvfrom,其系统调用直到数据包...

    Unix高级编程 pdf

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错...

    UNIX环境高级编程.pdf

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 ...

    UNIX环境高级编程第二版

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 ...

    UNIX环境高级编程(PDF)

    概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 ...

    中文第一版-UNIX环境高级编程

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 ...

    UNIX环境高级编程_第二版中文

    第3章 文件I/O  3.1 引言  3.2 文件描述符  3.3 open函数  3.4 creat函数  3.5 close函数  3.6 lseek函数  3.7 read函数  3.8 write函数  3.9 I/O的效率  3.10 文件共享  3.11 原子操作  ...

    UNIX环境高级编程(中文版+英文版+源代码)

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 ...

    UNIX环境高级编程中文版

    本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 ...

    Unix环境高级编程电子书

    1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 ...

    网络编程模型综述.doc

    1.UNIX网络I/O模型;2.Windows网络I/O模型;3.多路复用模型(Multiplexing);4.线程(进程)模型;5.多进程模型;......

    UNIX环境高级编程 不扣分哦

    本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 ...

    UNIX环境高级编程_第2版.part1

     关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在  此基础上介绍了多个应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附  录中给...

Global site tag (gtag.js) - Google Analytics