关于redis单线程多路复用的理解.
来源:4-1 Redis简介

坐看落花
2020-04-26
查了资料, 看了老师讲解几遍, 才大致理清了, 但应该还是有细节性的理解错误, 希望老师可以指出,以及指点下中间描述的疑惑
我当前理解的redis的单线程通过多路复用抽象类(Selector或者是其他)监听多个FD(也可以说是channel或者是socket, 这里有个疑惑,这个FD指的应该是一个session吧, 而不是说一次请求, 一次请求可以转化为一个事件?), 如果有就绪的读写事件, redis的线程会利用Selector 获取到所有就绪的事件然后串行执行处理, 就类似一个死循环, 一直判断是否有事件就绪, 有就获取就绪的事件, 然后处理,然后再循环
那最后的问题就是多路复用非阻塞应该不是对前文的串行执行非阻塞吧(因为看到有人说非阻塞是对每一个事件操作,无论有没有返回都会接着处理下一个事件, 这种我感觉不太对,我认为对事件处理是串行的,如果中间一个事件执行时间比较长, 后续的事件处理还是需要等待的), 而是对所有的session来说非阻塞, 不会因为一个session卡住了,而其他session的请求不会处理了, 因为这里是监听多个FD的,
写回答
1回答
-
同学好,redis现在用的是epoll,不是select,每个fd是一个文件描述符,现在也不会轮询,而是哪个有事件(比如ready了)就通知下去处理,类似监听者模型
032020-05-09
相似问题