RPC核心原理
1. RPC基础
1.4 网络通信
常见的网络 IO 模型
- 同步阻塞 IO (BIO)
- 同步非阻塞 IO (NIO)
- IO多路复用
- 异步非阻塞 IO (AIO)
BIO
BIO 是最常见和简单的模型,Linux 中默认所有 Socket 都是阻塞的。一个线程处理一个 IO
流程:应用进程发起 IO,应用进程阻塞,系统内核等待数据,内核拷贝数据到内存,解除阻塞
NIO
非阻塞 IO 要求Socket 被设置为 NONBLOCK
流程:应用进程发起 IO,系统内核等待数据,等待期间无论是否有数据都返回,应用进程如未收到数据则继续发起请求
IO多路复用
一个线程处理多个 IO 请求
流程:多个 IO 注册在同一复用器,应用进程调用复用器,应用进程在所有请求收到数据前一直阻塞,系统内核等待数据,内核拷贝数据到内存,所有请求收到数据后解除阻塞
AIO
请求后等待通知后再重新请求数据
流程:应用进程发起 IO 并启动一个监听,系统内核等待数据,等待期间无论是否有数据都返回,内核数据准备好并通知应用进程,应用进程收到通知后再次发起请求