- 什么是IO多路复用?
- IO 多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;
- 一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;
- 没有文件句柄就绪就会阻塞应用程序,交出CPU。
Nginx的IO模型
Nginx 支持多种并发模型,并发模型的具体实现根据系统平台而有所不同。
在支持多种并发模型的平台上,nginx 自动选择最高效的模型。但我们也可以使用 use 指令在配置文件中显式地定义某个并发模型Redis IO多路复用技术
redis 4.0 之后包含多线程,基本用于异步删除
redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量为什么 Redis 中要使用 I/O 多路复用这种技术呢?
Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用 就是为了解决这个问题而出现的。
redis的io模型主要是基于epoll实现的,不过它也提供了 select和kqueue的实现,默认采用epoll。select poll epoll 的对比
为什么有io多路复用机制
没有IO多路复用机制时,有BIO(同步阻塞)、NIO(同步非阻塞)两种实现方式
BIO : 单线程时,无法处理并发
NIO : 每次轮询所有 fd (包括没有发生读写实际的 fd)会很浪费 CPUio 多路复用的三种方式
fd全称“File descriptor”,中文名为“文件描述符”,它是内核为了高效管理这些已经被打开的文件所创建的一种索引
问题7及之后的所有答案参考链接
https://juejin.cn/post/6882984260672847879
8. select 函数及缺点
poll 函数及缺点
epoll 函数及缺点
epoll LT 和 ET 的区别
epoll 的应用