Java 通信阻塞与非阻塞模式的理解

一 java 阻塞同步与非阻塞同步。

https://blog.csdn.net/u010963948/article/details/78506693
目前IO通信模型有四种:阻塞IO,非阻塞IO,多路复用IO,异步IO。
这些IO模式都需要操作系统的支持,应用程序只是提供相应的实现,对操作系统进行调用。

二 IO多路复用

https://blog.csdn.net/u010963948/article/details/78507255
Java NIO。
这里写图片描述

2.1 Channel

通道,被建立的一个应用程序和操作系统交互事件、传递内容的渠道(注意是连接到操作系统)。一个通道会有一个专属的文件状态描述符。那么既然是和操作系统进行内容的传递,那么说明应用程序可以通过通道读取数据,也可以通过通道向操作系统写数据。

所有被Selector(选择器)注册的通道,只能是继承了SelectableChannel类的子类。如上图所示

ServerSocketChannel:应用服务器程序的监听通道。只有通过这个通道,应用程序才能向操作系统注册支持“多路复用IO”的端口监听。同时支持UDP协议和TCP协议。

ScoketChannel:TCP Socket套接字的监听通道,一个Socket套接字对应了一个客户端IP:端口 到 服务器IP:端口的通信连接。

DatagramChannel:UDP 数据报文的监听通道

2.2 Buffer

在JAVA NIO 框架中,为了保证每个通道的数据读写速度JAVA NIO 框架为每一种需要支持数据读写的通道集成了Buffer的支持。
例如ServerSocketChannel通道它只支持对OP_ACCEPT事件的监听,所以它是不能直接进行网络数据内容的读写的。所以ServerSocketChannel是没有集成Buffer的。

2.3 Selector

多路复用IO技术是操作系统的内核实现。在不同的操作系统,甚至同一系列操作系统的版本中所实现的多路复用IO技术都是不一样的。那么作为跨平台的JAVA JVM来说如何适应多种多样的多路复用IO技术实现呢?面向对象的威力就显现出来了:无论使用哪种实现方式,他们都会有“选择器”、“通道”、“缓存”这几个操作要素,那么可以为不同的多路复用IO技术创建一个统一的抽象组,并且为不同的操作系统进行具体的实现。

三 异步IO

https://blog.csdn.net/u010963948/article/details/78507615
异步IO则是采用“订阅-通知”模式:即应用程序向操作系统注册IO监听,然后继续做自己的事情。当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数。

猜你喜欢

转载自blog.csdn.net/secure2/article/details/81133168
今日推荐