由redis源码epoll和serverCron引发的同步异步问题

博客深入探讨了Redis源码中的epoll和serverCron在同步异步处理上的原理。文章指出,serverCron异步执行清理过期键等任务,而epoll在IO多路复用中属于同步非阻塞。讨论了同步/异步、阻塞/非阻塞的概念,并分析了网络包从发送到接收的同步异步特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看redis源码,对网络处理模型,命令接收这一块非常困惑,发现对同步/异步,阻塞/非阻塞这边概念模棱两可。

先放问题:
在看到serverCron时,源码中注释写到:
This is our timer interrupt, called server.hz times per second.Here is where we do a number of things that need to be done asynchronously.
For instance: …
这是redis的时间中断器,每秒调用server.hz次,以下是需要异步执行的操作:清除过期键,更新统计信息等…

Q1:这个时间事件函数,是异步执行的,这个异步是怎么实现的?有没有开线程去执行?
异步和多线程没有任何强的联系,多线程是异步的实现手段之一,可以互相组合使用,因为异步只不过是事件机制而已,事件一定要用到回调。
同步回调就是:把函数b传递给函数a。执行a的时候,回调了b,a要一直等到b执行完才能继续执行;
异步回调就是:把函数b传递给函数a。执行a的时候,回调了b,然后a就继续往后执行,b独自执行。---请注意这里不要和多线程纠缠起来:线程是存在于一个进程里的,而异步回调可能是好几个进程。

作者:二律背反
链接:https://www.zhihu.com/question/47371217/answer/105797161

Q2:redis的IO多路复用程序如ae_pool.c文件封装了epoll函数。epoll是同步的还是异步的ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值