0 课程地址
https://coding.imooc.com/lesson/380.html#mid=28222
1 个人收获
多路复用场景
2 课程内容
2.1 为何使用多路复用
redis 在单线程中,所有操作都是线性操作,所以i/o操作堵塞后,将不能返回。在多个客户端的时候,导致整个进程堵塞无法对其他客户端服务。(详细见上节)
2.2 多路复用场景
Blocking I/o 阻塞IO:当read/write对某一个文件描述符(FD)进行读写时,如果当前对FD不可读或不可写,则服务阻塞。对于处理多个客户端应用时,不选择此模型
2.3 Redis的Reactor设计模式
每一个网络连接对应一个文件描述符(客户端),redis客户端共同对redis服务器发起操作,文件处理器使用io多路复用模块监听多个文件描述符,当socket的就绪状态时(可读可写连接),文件处理器回调文件描述符绑定的事件处理器。虽然事件处理器在单线程运行,但是通过io多路复用实现同时对多个文件描述符的监控,提高了网络通信的性能。
2.4 Redis多个多路复用函数,会如何选择?
redis优先选择时间复杂度低的io多路复用函数作为底层实现,如果没有相关的高级函数epoll,qq等,会选择select作为备选方案。
2.5 为何生产上一般不用windows作为redis服务端?
windows一般只有select函数,最多只能同时服务1024个文件描述符,所以一般不会部署在windows上。