🌹 Server
2022年10月10日
- DB
🌹 Server
int main(int argc, char **argv) {
// ...
initServerConfig(); // 初始化 Server 配置
// ...
initServer(); // 初始化 Server
// ...
InitServerLast(); // Server 初始化的后置处理
// ...
aeMain(server.el); // 启动事件循环
aeDeleteEventLoop(server.el); // 删除事件循环
}
1. Server 初始化
1) 初始化 Server 配置
populateCommandTable
- 初始化命令表
2) 初始化 Server
- Server 相关参数初始化
- aeCreateEventLoop
- 创建 事件循环机制
- listenToPort & anetUnixServer
- 开启 (
TCP
|TLS
) &Unix
socket 监听
- 开启 (
- aeCreateTimeEvent
- 向事件循环中注册 timer 回调,执行
serverCron
函数,主线程执行
- 向事件循环中注册 timer 回调,执行
- aeCreateFileEvent
- 注册 (
TCP
|TLS
) &Unix
&module pipe
的 IO 事件回调
- 注册 (
- 其他初始化操作,
- 例如 集群初始化
3) Server 初始化的后置处理
- bioInit
- 初始化后台线程,创建线程执行 异步任务
- 例:AOF fsync 刷盘,lazyFree 等
源码
2. 启动事件循环
aeEventLoop
提供了- 创建 事件循环机制
- 注册 timer 事件
- 注册 file 事件
- 启动 事件循环机制
aeEventLoop
中通过调用具体的 多路复用方法实现多种 IO 多路复用,满足不同操作系统的要求select
epoll
- Linux 系统独有,优先使用
kqueue
- macOS 系统,优先使用,类似于 epoll 机制
evport
- illumos 系统,优先使用