IO多路复用

       📝个人主页:五敷有你      

 🔥系列专栏:面经

⛺️稳中求进,晒太阳

Redis为什么快呢?

  1. 它是C语言编写,速度快。
  2. 它是基于内存速度快。
  3. 他是单线程,减少了上下文的切换。
  4. 它是非阻塞IO多路复用。
  5. 具有高级数据结构(如 SDS、Hash以及跳表等)

那非阻塞IO是什么

通过该系统调用可以监视多个文件描述符。一旦某个描述符就绪(一般是内核缓冲区可读可写),内核就能将就绪的状态返回给应用程序。随后,应用程序根据就绪状态进行相应IO。

        在IO多路复用模型中通过select/epoll系统调用,单个应用程序的线程,可以不断轮询成百上千的socket连接,当某个或者某些socket网络连接有IO就绪的状态,就返回对应的可以执行的读写操作

O多路复用模型如下图所示:

那select和epoll有什么区别

           select是一个函数,它支持最大的连接数是1024或2048,因为select函数需要传入fd_set参数,fd_set就是一个bitmap,数据没到缓冲区就是0,到了为1。 select函数会不断遍历set中的bit标识位,当有标识位发生变化,就发起中断处理。

           epoll是为了解决select的缺点,它定义了epoll_event结构体来解决,解决了select存在最大连接数的限制,epoll不会遍历所有的文件描述符(fd),epoll会将准备就绪的文件描述符维护在一块指定的空间内,每次从中取出已经准备就绪的文件描述符处理,大大提高性能。

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五敷有你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值