为什么复线程的 可以成功高并发访问 Redis 面试官

  • 电脑网络维修
  • 2024-11-15

背景

上回说到小枫在接受面试官的拷打,所幸第一个疑问回答的还不错,因此面试官关于小枫的初步印象还行。咱们接着来看看小枫是怎样和面试官继续过招的吧,他还能扛得住面试官几个连环炮呢?

面试官调查目标剖析

面试官:Redis了解吗?说说为什么复线程的Redis可以允许高并发访问?

面试官调查目标剖析:

1、调查候选同窗关于Redis原理的了解水平;

2、调查候选同窗关于网络衔接的了解水平;

面试题剖析

面试官的疑问中蕴含了两个关键词,一个是复线程一个是高并发访问,因此咱们在回答疑问的时刻重要从两个方面登程,先解释分明为什么Redis选用复线程的成功模式,再解释分明为什么Redis能允许高并发访问。

小枫:(心坎OS:依据面试官的疑问,选择从两方面来启动论述,先整顿下回答思绪)

从Redis自身个性来说,Redis是基于内存的数据库,所以数据处置速度十分快。另外它的底层经常使用了很多效率很高的数据结构,如哈希表和跳表等。另外Redis从狭义下面来说他是复线程的,网络恳求解析与数据读写都是由主线程成功。因此它外部就省去了很多多线程访问共享数据资源的繁琐设计,同时也防止了频繁的线程高低文切换因此缩小了多线程的系统开支。

从IO模型角度来说,Redis经常使用的是IO多路复用模型,使得它可以在网络IO操作并发处置数十万的客户端网络衔接,成功十分高的网络吞吐率。这也是Redis可以成功高并发访问的最重要的要素。

PS:关于IO模型可以参考以前的文章

一文说清BIO、NIO、AIO不同IO模型演进之路

面试官:刚才你提到了IO多路复用模型,能详细说下Redis的IO多路复用的原理吗?

小枫:(心坎OS:过后为了搞分明这个疑问,还特地扒了Redis源码来看,关于一个Java程序猿来说,看c真的头晕啊)

好的。首先要明白的是Redis依赖Linux操作系统成功的高功能IO,刚刚提到的多路复用IO模型实践也是传统阻塞型IO模型演变而来的。在传统的网络IO操作中,accept()和recv()函数都是阻塞型的,一旦出现阻塞,影响其余网络衔接。然而在多路复用IO模型中,可以成功同时存在多个socket,内核监听socket中的能否有数据恳求或许衔接恳求,假设有恳求,那么内核就会交给Redis启动处置,因此Redis的主线程,也就是复线程的Redis可以处置多个IO衔接。

整个环节触及到epoll_create、epoll_ctl以及epoll_wait三个系统调用,详细的环节大抵是这样的:

1、当Redis启动的时刻,会调用内核的epoll_create创立epoll对象,在这个环节中蕴含初始化红黑树cache以及双向链表,红黑树中重要存储了须要启动形态监控的FD,实践就是epitem结构体,双向链表中存储了须要前往给用户曾经处于就绪形态的事情。

2、调用epoll_ctl(),经过epoll_ctl注册要监听的事情类型,将客户端FD以及须要监听的事情增加到红黑树cache中,增加时启动审核,假设已存在则前往,假设不存在则增加到节点当中,同时注册相应的事情回调函数,假设存在衔接事情或许读写事情,那么就会经过回调函数迁就绪的事情参与到双向链表中,实践就是红黑树的节点。

3、Redis调用epoll_wait失掉曾经就绪的事情的fired数组,fire数组的事情中存储了就绪的FD以及事情类型,遍历数组中的事情,依据事情类型处置函数继续后续的处置。假设是读事情那就调用读事情处置函数启动处置。关于Redis来说它只需关注链表中有没有数据就好,有数据就会启动读取,没有数据则阻塞超越timeout之后再启动调用。在大少数状况下,前往的数组中蕴含的事情并不多。经过这样的设计,Redis不须要不时轮训审核究竟有没有实践的恳求出现,防止了CPU资源的糜费。因此及时是复线程的Redis,借助于epoll机制,它也可以成功数十万衔接的并发处置。

面试官:(心坎OS:小伙子回答的不错,看来经常出现的面试题难不倒你啊,那么我就来问问圈套题吧,嘿嘿)

总结

程序猿小枫这次体现不错,抗住了面试官关于Redis的连环炮,那么接上去的疑问他还能回答进去吗?请大家继续刮目相待哦。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8057.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号