10078---Java NIO原理图文分析及代码实现

来源:互联网 发布:漫威英雄排名 知乎 编辑:程序博客网 时间:2024/05/13 00:28

原文:http://blog.csdn.net/zmx729618/article/details/51858230

一、java NIO 和阻塞I/O的区别

1. 阻塞I/O通信模型

    假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时

(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过

 来后,服务端都会启动一个线程去处理该客户端的请求。阻塞I/O的通信模型示意图如下:


如果你细细分析,一定会发现阻塞I/O存在一些缺点。根据阻塞I/O通信模型,我总结了它的两点缺点:
1.当客户端多时,会创建大量的处理线程。且每个线程都要占用栈空间和一些CPU时间
2.阻塞可能带来频繁的上下文切换,且大部分上下文切换可能是无意义的。
在这种情况下非阻塞式I/O就有了它的应用前景。

2. java NIO原理及通信模型
Java NIO是在jdk1.4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O。下面是java NIO的工作原理:
1.由一个专门的线程来处理所有的 IO 事件,并负责分发。
2.事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
3.线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。

阅读过一些资料之后,下面贴出我理解的java NIO的工作原理图:

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 弃还真元始诸天 桔梗弃少归来 爱你此生不弃 花不弃51全集免费观看 久播影院永不言弃 弃少归来卓不凡全部 小女花不起弃演员表介绍 不凡弃少 门派弃徒叶辰 弃不悔 离弃 不弃 纵有疾风起人生不言弃 剑徒 少壮不努力老大徒伤悲 师父徒儿 少壮不努力老大徒伤悲意思 基督徒能不能帮男友口 司徒雷登 剑徒之路惰堕 徒法不足以自行 司徒美堂 市井之徒 一语不能践万卷徒空虚 弃徒叶辰 师父不坏徒儿不爱 不肖之徒 少壮不努力老大徒伤悲全诗 今天也不想收龙傲天为徒 萧云司徒静 洪荒阐教首徒 不逞之徒 基督徒能不能帮老公口 九叔首徒 总人想带坏我徒孙 总人想带坏我徒孙尤前 戏说呓语截教次徒 尤前总人想带坏我徒孙 我的人生重置华山弃徒 总有人想带坏我徒孙尤前 徙怎么读