java nio学习记录1
来源:互联网 发布:社工库数据库共享平台 编辑:程序博客网 时间:2024/06/05 11:06
####目的:为了很好的理解hadoop中zookeeper,深入了解其原理
一、nio基本实现
1、java nio 提供了阻塞与非阻塞的方式响应socket,通过selector注册channel方式,轮询可以操作的io流对象,取得selectionkey,实现socket数据流的操作;
2、selector与channel的非阻塞方式同步使用;
3、channel:serversocketchannel、socketchannel、datagramchannel(upd),绑定本地服务端口channel.socket().bind(port)
4、selector.open打开注册器,serversocketchannel.open/datagramchannel.open打开监听通道
5、设置channel为noblock,注册channel.register()
6、注册selectionkey的属性read、write、accepet/connection
7、clientchannel打开监听端口,
8、server/client实现信息发送接收,通过selector获取当前可操作selectionkey,取得当前通道实现消息sendorwrite
二、nio原理
1、Java NIO相对于旧的java.io库来说,并不是要取代,而是提出的三个新的设计思路:
- 对原始类型的读/写缓冲的封装
- 基于Channel的读写机制,对Stream的进一步抽象。
- 事件轮询/反应设计模式(即Selector机制)
按上述思路,而Channel机制是作为Stream的进一步抽象而产生的,那么Channel和Stream相比有什么不同呢?按字面理解实际上就可以获得信息:Stream作为流是有方向的,而Channel则只是通道,并没有指明方向。因此,读写操作都可以在同一个Channel里实现。Channel的命名强调了nio中数据输入输出对象的通用性,为非阻塞的实现提供基础。
2、
三、nio局限
1、查看一些大牛的文章,了解到java nio为了兼容不同平台的底层实现,为了对开发着提供统一api,其底层实现在window上tcp链接而linux系统则是pipe,并且开启一个selector
链接会成对出现保证自身的可及时唤醒,所以如果打开多个selector有可能跑出lookback等异常。
2、在开源mina和grizzy中,mina采用cpu个数来初始化selector线程池而grizzy只有2个selector线程,同样的是两者都采用了accept与事件处理分离的处理方式
四、nio如何保证数据一致性
zookeeper保证多个server的数据一致性是其最为出众的地方,其中消息传递与nio有关系,利用nio的高可用性实现消息
- java nio学习记录1
- nio学习记录Buffer(1)
- java nio学习记录2---详解
- 学习记录--nio(二)
- java nio的学习-1
- java nio学习笔记1
- JAVA NIO学习笔记1
- java nio 学习总结1
- 1、JAVA之NIO 学习新手记录【为财搏命的江湖】
- Java NIO之Channel和Buffer学习记录
- 深入I/O学习记录-02java NIO工作机制
- 学习记录-----NIO(一)
- java nio编程学习笔记(1)--初步了解nio
- Java NIO学习1(预习)
- Java NIO学习3(缓冲区1)
- JAVA NIO学习笔记1 - 架构简介
- java.nio包学习
- Java Nio学习笔记
- poj1050 to the max (DP)
- linux网卡info
- TF-IDF及其算法
- Console命令详解,让调试js代码变得更简单
- ubuntu12.04设置开机屏幕亮度
- java nio学习记录1
- 配置官网peerDroid实例
- 对BMAPtoAVI使用总结
- sql导出数据并生成excel报告
- HTML特殊符号对照表
- SetUnhandledExceptionFilter function
- 小白IOS开发日记-UITableView篇(一)
- 三十五个非主流开源数据库 MongoDB领衔主演
- Thinking in BigData(六)大数据技术核心之ETL