(资料图片)
多路复用指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用 select 和 poll 函数,传入多个文件描述符,如果有一个文件描述符就位,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启用线程执行(比如使用线程池)、
就是说多路 IO 复用起到一个监视的效果,就绪后,Redis 直接执行,不需要等待
串行与采用多线程+锁(Memcached)与单线程+多路 IO 复用的比较
串行:阻塞 IO,一件事一件事的做,在做当前事时,不能做其他事,有等待
采用多线程+锁:非阻塞 IO,一直重复做当前的事,没有等待
单线程+多路 IO 复用:做某件事情需要一定的时间,可以监视这件事,我们可以做其他的事。多路 IO 复用有 select,poll,epoll 这些模式。select 监测数量能力有限。poll 监测数量没有限制,但是需要一个一个核查。配 epoll 监测数量没有限制,也不需要一个一个核查,直接看是否有一个正确的标识。