目录
io多路复用
io介绍
io输入输出都是在内存中进行的,io多路复用是放便程序对读写缓冲区是否有io申请检测
I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的系统调用主要有 select、poll 和 epoll。
io多路图解
在等待io中有两种等待方式分别对应两种模型
阻塞等待:
在程序等待io;时阻塞进程,cpu会挂起进程,等事件发生后再唤醒。
人话:假如你是一个进程在家等快递,如果快递没到你就只能睡觉,直到快递员打电话给你唤醒你去拿快递。如果你有n个快递,那就必须创建n个进程。但这会带来好处和坏处
BIO模型
使用多线程等待io,每个进程对应一个Client
非阻塞等待:
cpu会不断的询问中间函数的事件是否完成,造成cpu浪费。
人话:假如你是一个进程在家等快递,如果快递没到你就去干别的事情,但隔几分钟就会和快递员打电话询问快递是否到达。有n个快递打n个电话。注意,这时候你保留了所有快递员的电话号码。
NIO模型
优点:提高程序执行效率
缺点:要更多cpu和系统资源
多路复用
多路复用:将所有套接字接口给内核判断有无消息传输,程序只需要询问一次内核即可
select/poll。
多路复用就像一个快递代收员,可以帮我们代收快递。分别有select,poll,epoll
epoll![](https://img-blog.csdnimg.cn/0a164271192849d9a022249c7ab8bce8.png)