Redis采用的网络模型是单线程的Reactor网络模型,异步处理,因为性能很高。
 
Reactor先从客户端获取请求,然后dispatch给具体的执行的线程。处理的流程即为read->decode->compute->encode->send。
而Redis的IO多线程的处理时,会构造一个消息队列,上述处理的流程中,只有compute为单线程串行执行,其余过程分发到不同的线程中执行。这意味着命令解析、执行、响应生成等仍然是在主线程中处理的,但是将客户端请求的读取和响应的写入操作可以在多个 I/O 线程中进行。
启用方式:
-  在 Redis 配置中设置 io-threads-do-reads为yes并指定 I/O 线程的数量(通过io-threads选项)
-  修改分发策略, int item_id = 0;改为int item_id = 1;线程分发时先分发给IO线程而不是主线程中处理。
GDB调试步骤:
-  确保可执行程序携带调试信息 -g-ggdb
-  启动调试器: gdb可执行程序gdb src/redis-server
-  设置断点 break- 收集读任务:break networking.c : 2534
  - 分发读任务:break networking.c : 4233
  - 处理读任务:break processCommand
- 收集写任务:break clientInstallWriteHandler
- 处理写任务:break writeToClient
 
-  运行程序: run redis.conf- 每一步中列出所有线程:info threads
- 其中redis-server是主线程
- io_thd1-3是io线程
 
- 每一步中列出所有线程:
-  控制执行或者打印变量值或者查看调用堆栈 - next- n
- step- s
- continue- c
- print
- backtrace- bt
 
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB