一、名词解释
1.1 同步与异步
同步与异步更关注交互双方是否可以同时工作
- 同步:请求 -> 等待返回 -> 返回 -> 下一次请求,需要等待结果返回(CS非同时工作);
- 异步:客户端一直请求,服务端一直处理,不用等待结果返回,比如Future(CS同时工作);
1.2 阻塞与非阻塞
阻塞与非阻塞关注交互双方是否可以一心多用
- 阻塞:A->B,A一直等着B响应,期间不去干别的(一心一用);
- 非阻塞:A->B,A请求完成可以干别的,B响应了再回来继续处理(一心多用);
1.3 伪异步I/O
本质上还是同步阻塞I/O
不过是在服务器把socket链接封装成Task提交给线程池处理
因为有队列,所以可以突破C:S=1:1的比例
1.4 I/O多路复用
通过把多个I/O的阻塞复用到一个阻塞上,从而使得系统在单线程情况下可以处理多个客户端的请求。
类似于linux的epoll、select
1.5 多路复用器
Selector,核心是通过Selector来轮询注册在其上的Channel
当发现有Channel就绪就返回Channel的选择键集合,进行I/O操作;
二、不同I/O模型对比表格
三、参考
- 《Netty权威指南 2th》