文档章节

说说IO(二)- IO模型

abcijkxyz
 abcijkxyz
发布于 2016/07/08 16:30
字数 681
阅读 3
收藏 0

这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。

IO请求的两个阶段

       等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

       使用资源阶段:真正进行数据接收和发生。

       举例说就是排队服务。

 等待数据阶段,IO分为阻塞IO和非阻塞IO。

       阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

       非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用

 使用资源阶段,IO分为同步IO和异步IO。

       同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

       异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。

 

 

按照Unix的5个IO模型划分

 

  • 阻塞IO
  • 非阻塞IO
  • IO复用
  • 信号驱动的IO
  • 异步IO

从性能上看,异步IO的性能无疑是最好的。

 

各种IO的特点

  • 阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种方式,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程膨胀。
  • 非阻塞IO:采用轮询方式,不会形成线程的阻塞。Java的NIO使用这种方式,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大减少了线程数。

 

  • 同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程方式会简单。Java的BIO和NIO都是使用这种方式进行数据处理。
  • 异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统放放面面。

本文转载自:http://blog.csdn.net/yuwenruli/article/details/6708092

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
JAVA NIO(知识一)

java nio基本上常用的组件,selector,channel,buffer。这三个,其他的可以用到的时候再去参考就可以了。 看一本书的时候,基本看前三章或者四章基础知识,剩下的,实际生产中用到了再去看就...

豆芽菜橙
2017/08/12
0
0
IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我...

1527
07/16
0
0
IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我...

1527
07/12
0
0
openstack 扩展开发最佳实践之云主机监控查询

前言:此功能代码不代表笔者代码正常水平。。。真的只是为了实现而实现,很多硬代码加不优雅的地方。就让我自己先吐槽一下吧,首先是代码每次会去拿token而不是用horizon缓存的token,没有将j...

youerning
06/28
0
0
Asyncdb(二):Java IO 初探

本文由 GodPan 发表在 ScalaCool 团队博客。 Java IO对大多数Java程序员来说是熟悉又陌生,熟悉的是感觉到处都有它的身影,小到简单的读取文件,大到各种服务器的应用,陌生的是Java IO背后到...

ScalaCool
2017/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL 主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

野雪球
6分钟前
0
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
55分钟前
52
6
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
29
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部