设为首页 收藏本站
查看: 636|回复: 0

[经验分享] hadoop学习笔记(二)——IO的5种模型

[复制链接]

尚未签到

发表于 2016-12-13 08:25:17 | 显示全部楼层 |阅读模式
  之前说了为了分析hadoopRPC机制,就要了解NIO,在说NIO之前我想先把IO的5种模式简要的记录下。
  首先在Unix网络编程中IO大致分为5种:
  1.阻塞IO
  2.非阻塞IO
  3.多路复用IO
  4.信号驱动IO
  5.异步IO
  因为第四种不常用,所以我就分析剩下的四种模型。
  当然我在研究这些模式的时候还是经常搞混一些东西,比如大家肯定听过什么同步IO,阻塞IO,同步非阻塞IO,当时我也对这些概念很模糊,现在就先来理一理。
  在Unix中的同步和异步的定义先来看一看:
   同步IO操作:IO操作将导致请求进程阻塞,直到IO操作完成。
        异步IO操作:IO操作不导致请求进程阻塞
  然后我理解中IO模型可以从两部分来分,一种是阻塞和非阻塞,一种是同步和异步。怎么区别他们呢,这里首先就要理解IO操作的整体过程,我所理解的是IO的操作一般就分为两部分,第一步是发起IO请求(就是等待数据准备),第二步是实际IO操作(就是将数据从内核拷贝到进程中)。阻塞和非阻塞的区别就在第一步,同步和异步的区别就在第二步。有了这两个概念,我们就来简略的分析下5种IO模型。
    一.阻塞IO
  这种IO模式就是最常见的IO模式,就像我们操作read()的时候,首先发送读取数据的IO请求,当数据还没到来的时候,进程就要一直等待直到请求被接受,数据到来,这时候才进行数据的读取操作,这里我们可以看出IO的两个操作,发起请求的时候进程要被阻塞,实际IO操作的时候进程也要被阻塞。我们以一个例子来形象说明,当你叫了一个外卖的时候,叫完外卖,什么事都不干,就等着外卖到来,这就是阻塞IO。
  二.非阻塞IO
  这种IO模型是这样的,依旧以操作read()为例,首先发送IO请求,当数据还没来的时候进程不用等待,但是会不断轮询看看数据是否到来,没来的话返回一个error,直到数据到来为止。可以发现这种模型在发起请求的时候进程是没在等待的。还是以外卖的例子,当你叫完外卖的时候,不是什么事都不干,而是一直打电话问外卖到了没有,这就是非阻塞IO。
   三.多路复用IO
  这种IO模型引入了seclect/epoll的概念,其中epoll是select的升级版。就先以select来说,他调用了一个select函数,或者说是代理。我们知道在阻塞IO中一个线程只能处理一个IO请求,要是想处理多个IO请求呢,这时候就引入了select的代理,它可以同时帮多个IO代理,不断轮询流中的数据,当有可读或者可写的数据的时候就告知给在等待的IO线程。多路复用IO就是这样一种IO模型,这时候我们以socket为例,首先进程要先调用一个select,这时候进程就会被阻塞,而同时,内核会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。可以知道这中模型在发送请求阶段进程还是阻塞的只不过是select阻塞了进程。这种模式和阻塞模式很像,不同的是可以处理多个IO请求。以外卖的例子为例,这时候不同的是你可以同时叫还几分不同的外卖,哪份外卖来了就可以去取那份外卖,取的时候别的外卖是进不来的。
         四.异步IO模型
        之前我们知道同步和异步的概念主要就是在实际IO操作的时候,同步IO在实际IO操作的时候将导致进程阻塞,异步IO将不会导致进程阻塞。异步IO模型就是当你发出IO请求的时候,进程可以做别的事情,所有的数据请求,实际 IO操作都在后台完成,只要完成的时候通知你就行了。以外卖的例子为例,这时候我们加一个过程,就是取外卖的过程,同步IO模型就是外卖到的时候你要自己下楼去取,异步IO模型就是外卖会直接送到你的桌面上,然后通知你外卖到了。
         综上我们可以知道,阻塞IO,非阻塞IO,多路复用IO,信号驱动IO,其实都是同步IO。他们的主要区别就在第一步发送请求的时候进程是否被阻塞,第二步实际IO操作的时候进程都是要被阻塞的。
  最后一张图来理清这几种IO之间的区别:
  
DSC0000.gif
 

     
        好了IO模型就先讲到这里,其实自己觉得还很浅显有些问题没有明确,欢迎大神指出,下一篇将说说java的NIO。
       
        

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-313467-1-1.html 上篇帖子: Open Declaration org.apache.hadoop.io.Writable 下篇帖子: Setting up Hadoop on Windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表