请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于redis单线程多路复用的理解.

查了资料, 看了老师讲解几遍, 才大致理清了, 但应该还是有细节性的理解错误, 希望老师可以指出,以及指点下中间描述的疑惑

我当前理解的redis的单线程通过多路复用抽象类(Selector或者是其他)监听多个FD(也可以说是channel或者是socket, 这里有个疑惑,这个FD指的应该是一个session吧, 而不是说一次请求, 一次请求可以转化为一个事件?), 如果有就绪的读写事件, redis的线程会利用Selector 获取到所有就绪的事件然后串行执行处理, 就类似一个死循环, 一直判断是否有事件就绪, 有就获取就绪的事件, 然后处理,然后再循环

那最后的问题就是多路复用非阻塞应该不是对前文的串行执行非阻塞吧(因为看到有人说非阻塞是对每一个事件操作,无论有没有返回都会接着处理下一个事件, 这种我感觉不太对,我认为对事件处理是串行的,如果中间一个事件执行时间比较长, 后续的事件处理还是需要等待的), 而是对所有的session来说非阻塞, 不会因为一个session卡住了,而其他session的请求不会处理了, 因为这里是监听多个FD的,

正在回答

1回答

同学好,redis现在用的是epoll,不是select,每个fd是一个文件描述符,现在也不会轮询,而是哪个有事件(比如ready了)就通知下去处理,类似监听者模型


0 回复 有任何疑惑可以回复我~
  • 提问者 坐看落花 #1
    老师今天下班好早啊, 那我后面的理解没有问题吗, 就是事件队列会串行化执行, 而不是非阻塞(异步),
    回复 有任何疑惑可以回复我~ 2020-04-28 21:33:35
  • 翔仔 回复 提问者 坐看落花 #2
    同学好,具体可以看看epoll,它是没队列的,所以并非串行哈
    回复 有任何疑惑可以回复我~ 2020-04-29 13:12:08
  • 提问者 坐看落花 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-05-09 13:28:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信