IO模型

三种模型的区别在于通道的数量(单/多),异步还是同步,阻塞还是非阻塞!:

Java BIO:

同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。JDK1.4之前的唯一选择!
通信模型知识补充: - 图1

Java NIO :

  1. **同步非阻塞**,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器(Selector)轮询到连接有I/O请求就进行处理,如果这个客户端不做任何事情则不会处理,减少线程开销。JDK1.4引入!<br />![](https://cdn.nlark.com/yuque/0/2021/png/21361442/1622775826199-ff05e6be-bf5c-4262-9633-855ebaefac5c.png#align=left&display=inline&height=357&margin=%5Bobject%20Object%5D&originHeight=357&originWidth=789&size=0&status=done&style=none&width=789)

Java AIO(NIO.2) :

  1. **异步非阻塞**,AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。 AIO还没有得到广泛的使用!JDK1.7支持!

通信模型知识补充: - 图2

RPC协议

远程过程调用
如:两台不同的虚拟机不能使用相互间的类型,这时使用RPC协议就能相互调用。
image.png

术语介绍:

Endpoint:

通信端点,理解为一个要通信的终端进程或设备,一种抽象表达!

Backend:

通信后台进程服务,终端的后台实现,具体的通信设备或终端,
举例 :CoarseGrainedExecutorBackend。—>executor
DriverEndpoint in CoarseGrainedSchedulerBackend —>Driver

通信模型知识补充: - 图4