最近看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是同步的还是异步的?
在处理 IO 的时候,阻塞和非阻塞都是同步 IO。
只有使用了特殊的 API 才是异步 IO。

为了解决以上问题,先要解决什么是同步异步,什么是阻塞非阻塞,什么又是事件驱动。来源:

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

被折叠的 条评论
为什么被折叠?



