• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

redis源码阅读之ae_select

redis 海叔叔 2小时前 4次浏览 已收录 0个评论

redis是单线程,要做到快速呢,就需要用到I/O多路复用技术了,今天闲来讲讲最为普遍的select

其中各个参数的含义如下:

maxfdp1: 待测试的文件描述字的个数,其值是待测试的最大描述符加1(由于描述符是从0开始索引)
readfds: 指向对可读感兴趣的描述符集合的指针
writefds: 指向对可写感兴趣的描述符集合的指针
errorfds: 指向对处于异常条件感兴趣的描述符集合的指针
timeout: 指定愿意等待的时间长度。若为NULL,则堵塞;如果其结构体内元素均为0,则直接非堵塞;如果以上两种均不满足,则等待固定时间后返回
其中fd_set可以理解为一个描述符集合,一般情况是用如下几个宏来对其进行操作

函数的返回值由三种情况

-1:出错
0:没有描述符准备好
正数:3个描述符集合当中已经准备好的描述符的个数之和
其劣势也就显而易见了,如果maxfd比较大,那么当返回之后,我们就得,全部轮询各个集合来进行后续操作,这就比较浪费 时间了,所以,select是redis当中I/O多路复用的下下之选,
在redis当中,封装结构如下:

其实现常规的api函数如下:

最主要的实现函数为

由以上函数我们可以知晓,在ae_select设置的时候,使用的是rfds和wfds,在调用select的时候,是将上面两个拷贝到_rfds和_wfds当中,这里是为了避免重用描述符时的安全问题~
还望各位看官多提宝贵意见


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址