Hadoop RPC热身之Java NIO
来源:互联网 发布:linux c 服务器 编辑:程序博客网 时间:2024/06/05 22:36
在讲NIO之前先来谈谈阻塞与非阻塞IO,同步与异步IO。
我们知道IO读请求操作包含两步
1)查看数据是否就绪;
2)进行数据拷贝(内核将数据拷贝到用户线程)。
为什么会存在数据拷贝?因为用户空间是非特权区域,不能直接访问硬件设备。
阻塞与非阻塞区别在第一阶段,如果待读取的数据没有就绪,是不是一直处于等待状态
而同步与异步区别在于第二阶段,看数据拷贝是由用户线程完成还是内核线程完成
UNIX系统有五种IO模型:
阻塞IO模型,非阻塞IO模型,多路复用IO模型,信号驱动IO模型,异步IO模型
不过有人认为NIO是多路复用IO模型,有的说是异步IO模型,不过我认为支持异步非阻塞IO模型总是没错的。
除了上述优点外,NIO还有个重要概念就是它是基于块的,传统的IO是基于字节的,就像编程思想里说的:通道好比煤矿,缓冲区(块缓冲区)就像卡车,卡车满载而归。
图1是大概的逻辑模型,这样就减少了以前的不必要等待,也就是你该干嘛干嘛去,等好了通知你。
图1 基于事件驱动模型图
至于程序就不贴了,网上也很多,具体可看API。下面我想说说大概流程,便于记住
以前我们写程序,先创建网络套接字连接,获取连接上的输入输出流,这个Stream是按照字节来的。
现在呢,
我们创建的叫通道Channel,java虚拟机呢有个线程叫通道管理器selector,这时你把通道的监听交给这个通道管理器。这一步是不是证明你不用死等了?
光注册事件没用啊,你怎么捕获呢?好,你可以写个死循环,一直询问有没有我感兴趣的事件(比如读事件啊)。如果有,就在得到的事件下编写相应逻辑代码。
我们知道,阻塞和cpu的切换是一种资源浪费,我们也可能想过怎么去减少等待的时间与cpu资源的占用。NIO很好的给我们提供了解决方案。
当然了,NIO不止这一个特性,他的共享缓冲区也是蛮强大的,对于分析hadoop的RPC机制,今天先分析到这
- Hadoop RPC热身之Java NIO
- Hadoop RPC热身之Java 动态代理
- Hadoop RPC热身之Java 反射
- Hadoop RPC实现NIO通信范例
- Hadoop之RPC概述
- Hadoop学习之RPC
- hadoop之RPC
- Hadoop RPC Server基于Reactor模式和Java NIO 的架构和原理
- Hadoop笔记一之Java中Rpc通信
- Java-RPC:2)NIO入门初窥
- Hadoop源码之RPC机制
- Hadoop之RPC架构分析
- Hadoop学习笔记之RPC
- Hadoop之RPC简单实现
- hadoop RPC协议之WritableRpcEngine
- Hadoop RPC协议之 ProtobufRpcEngine
- ipc,hadoop RPC,java RMI
- Hadoop RPC实现NIO通信Server端剖析
- 王爽汇编语言学习笔记(十) --CALL和RET指令
- 图解myeclipse把maven普通java项目变成web项目的全程操作
- 公钥,私钥和数字证书基本概念
- mysql for udpate详解
- STM32电源端为什么通过电容接地
- Hadoop RPC热身之Java NIO
- 有关UILable的高度和宽度自动调整和获取
- Redhat server 6.5 vsftp 安装
- asp.net控件DropDownList实现级联查询
- [Java]求字符串的交集
- poj解题报告——3083
- 湖南长沙自愿连锁经营业就是一个苦涩的梦!网资能将我们从梦中醒来吗?
- mongodb写操作总结
- Android :ScaleAnimation