请稍等 ...
×

采纳答案成功!

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

多路复用的流程模型理解

https://img1.sycdn.imooc.com//szimg/5e96d42209cbce8709320472.jpg

老师好,我可以理解为网络有很多io请求发给上图中的thread(也就是redis的主线程),然后thread把io要操作的fd扔给selector去监听内核的fd是否可读、写,这时候thread先去忙别的,然后对应的fd可操作时候再返回给thread去处理这次io请求?还有就是selector是redis的主线程fork出来的子线程去做监听fd么?

正在回答

1回答

翔仔 2020-04-18 00:05:21

同学好,select那个是有内核告诉应用程序有事件来了,然后select去循环所有的fd看哪个就绪了,select可以理解为程序里的一个子线程。

0 回复 有任何疑惑可以回复我~
  • 提问者 莨菽菽 #1
    老师,图里还有些不明白,图中的Thread是指谁的线程(是程序的哪一部分还是操作系统的)?selector呢?channel是具体是指什么?
    回复 有任何疑惑可以回复我~ 2020-04-18 10:51:20
  • 翔仔 回复 提问者 莨菽菽 #2
    同学好,图里的Thread指的就是redis线程,redis是单线程,Selector是整个NIO Socket的核心实现,即多路复用器,是一个抽象类,不通的操作系统会返回它不同的实现类实例,Selector可以理解为监视器。而监视器主要就是监视注册在它里面的channel,channel就相当于一个个外部请求。一旦接收到完整的请求,它就会通知redis线程(进程)。
    回复 有任何疑惑可以回复我~ 2020-04-18 19:37:13
  • 提问者 莨菽菽 回复 翔仔 #3
    老师好,还有两点疑惑,1.select系统调用是指整个图是吧?2.还有就是fd也是selector监听么?(我的理解是selector不止监听channel还监听fd,当channel和对应需要操作fd都准备好了才发给thread操作?)
    回复 有任何疑惑可以回复我~ 2020-04-18 21:49:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信