I/O多路复用的实现方式有Select、Poll、Epoll,I/O多路复用是单个线程记录跟踪每一个I/O流的状态来同时管理多个I/O流,一旦发现有I/O流( 表现为文件描述符 )可以进行无阻塞I/O访问时候,就进行数据处理。
什么叫可以进行无阻塞I/O访问呢?
I/O多路复用程序监听多个Socket,并将Socket产生的事件放入队列中排队,有个叫事件分配器的每次从队列中拿出来一个事件进行处理,当这个事件处理完之后,就可以进行无阻塞I/O访问了。
这可以避免来一个请求就分配一个线程的弱点,
Select- select 会修改传入的参数数组
- select 不会告诉你具体是哪个I/O流有数据,你得自己轮询
- select只能监视1024个连接
- select不是线程安全的
- 没有1024限制
- 与Select一样,不是线程安全的
- 线程安全的
- 可以告诉你具体是哪个I/O流有数据
- epoll只有Linux支持
Redis 内部使用单线程的文件事件处理器 file event handler
采用IO 多路复用机制同时监听多个 Socket,根据 Socket 上的事件来选择对
应的事件处理器进行处理。



