最近看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是同步的还是异步的ÿ