加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java NIO原理图文分析及代码达成

发布时间:2021-11-23 15:27:48 所属栏目:教程 来源:互联网
导读:最近在分析Hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考: http://ww
最近在分析Hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考: http://www.linuxidc.com/Linux/2012-06/62079.htm )和Java NIO。为了能够正确地分析hadoop的RPC源码,我觉得很有必要先研究一下java NIO的原理和具体实现。
 
这篇博客我主要从两个方向来分析java NIO
 
目录:
一.java NIO 和阻塞I/O的区别
     1. 阻塞I/O通信模型
     2. java NIO原理及通信模型
二.java NIO服务端和客户端代码实现
 
具体分析:
 
一.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就有了它的应用前景。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读