一:根据unix的网络编程对I/O模型的分类,UNIX提供了5种I/O模型
===>阻塞I/O模型:最常用的I/O模型。所有文件操作都是阻塞的。我们以套接字接口为例讲解此模型:在进程空间中调用recvfrom,其系统调用直到数据包到达且被复制到应用程序的缓冲区中或者发生错误时才返回。在此期间一直会等待,进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞的。因此被称为阻塞I/O模型。
===>非阻塞I/O模型:recefrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,一般对非阻塞I/O模型进行轮询检查这个状态,看内核是不是有数据来。

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

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

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

java的nio之:unix内核的五种I/O通信模型的更多相关文章

  1. java架构之路-(设计模式)五种创建型模式之单例模式

    设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可 ...

  2. Unix下五种IO模型

    http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. ...

  3. Unix下 五种 I/O模型

    Unix下共有五种I/O模型: 1. 阻塞式I/O  2. 非阻塞式I/O  3. I/O复用(select和poll)  4. 信号驱动式I/O(SIGIO)  5. 异步I/O(POSIX的aio ...

  4. Java NIO学习与记录(五): 操作系统的I/O模型

    操作系统的I/O模型 在开始介绍NIO Reactor模式之前,先来介绍下操作系统的五种I/O模型,了解了这些模型,对理解java nio会有不小的帮助. 先来看下一个服务端处理一次网络请求的流程图: ...

  5. java学习-NIO(五)NIO学习总结以及NIO新特性介绍

    我们知道是NIO是在2002年引入到J2SE 1.4里的,很多Java开发者比如我还是不知道怎么充分利用NIO,更少的人知道在Java SE 7里引入了更新的输入/输出 API(NIO.2).但是对于 ...

  6. java的nio之:浅析I/O模型

    也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗.在 进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型.下面本文先从同步和异步的概念 说起 ...

  7. I/O模型系列之二:Unix的五种网络I/O模型

    1. Unix的五种I/O模型 从上往下:阻塞程度(高-----低)I/O效率  (低-----高) 阻塞I/O(Blocking I/O):传统的IO模型 非阻塞I/O(Non-Blocking I ...

  8. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  9. java BIO/NIO/AIO 学习

    一.了解Unix网络编程5种I/O模型 1.1.阻塞式I/O模型 阻塞I/O(blocking I/O)模型,进程调用recvfrom,其系统调用直到数据报到达且被拷贝到应用进程的缓冲区中或者发生错误 ...

随机推荐

  1. 提示框alertmsg

    初始化: 1.Data属性:DOM添加属性data-toggle="alertmsg",并定义type及msg参数 示例代码: <button type="butt ...

  2. key 4v4

    #include "key4v4.h" #include "stm32f10x.h" #include "delay.h" /* PA4-L ...

  3. 2016-1-9 Quartz框架的学习,写字板demo

    一:自定义view .h文件中代码如下 #import <UIKit/UIKit.h> @interface ZLpaintView : UIView @property(nonatomi ...

  4. 2016-1-7第一个完整APP 私人通讯录的实现 6:在联系人界面增加删除联系人的功能

    一:在viewDidLoad方法中代码添加一个UIBarButtonItem,并将其的类型设置成垃圾桶,代码如下: - (void)viewDidLoad { [super viewDidLoad]; ...

  5. Android ListView ListActivity PreferenceActivity背景变黑的问题ZT

    Android ListView ListActivity PreferenceActivity背景变黑的问题 ListView在滚动时背景会变暗甚至变黑,这个要从Listview的效果说起,默认的L ...

  6. swift系统学习第三章

    第九节:结构体-sturt //: Playground - noun: a place where people can play import UIKit /* swift学习第九节 结构体:st ...

  7. DXUT初步理解

    关于DXUT框架: DXUT(The DirectX Utility Library) 是建立在Direct3D9 和Direct3D10 API上的一个程序框架.它的目标是建立一个强大而容易使用的D ...

  8. magento数据库备份导入还原

    Magento数据库备份.移植终极解决方案+3 分类:Magento教程 标签:magento搬家.magento数据库备份.magento更换域名.magento移植 4,355人浏览 作为电子商务 ...

  9. 301、404、200、304、500等HTTP状态,代表什么意思?

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器超时 下面提供 HTTP 状态码的完整列表.点击链接可了解详情.您也可以访问 HTTP 状态码上的 ...

  10. js去掉空格

    去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写.下面的实现方法是用到了正则表达式,效率不错,并把这三 ...