redis的命令执行过程
1 分钟阅读
•
198 字
+
76 词
- 客户端请求
- 通过IO多路复用,调用readQueryFromClient将可读事件的client放入redisServer.clients_pending_read列表(IO队列)
- 主线程调用handleClientsWithPendingReadsUsingThreads将client分配给线程绑定的队列。 io_thread_list[0] ----- io_thread_list[n]
- 主线程和IO线程多线程去调用readQueryFromClient来执行命令解析
- 但是执行命令的时候,还是单线程模型,等待所有IO线程解析命令完成,并执行命令请求。
- 将待响应client添加到clients_pending_write队列,并将队列中client分配给IO线程并通知线程此次处理的是可写事件。
- 主线程和IO线程多线程调用writeToClient发送数据响应客户端。
- 主线程阻塞等待所有IO线程将响应发给客户端,再检查clients_pending_write是否还有数据要返回给客户端,如果有将剩余数据响应给客户端。