redis6.0添加了IO多线程,个人理解的流程如下
1 创建el
2 创建监听socket,设置回调函数为acceptTcpHandler,这个回调函数的处理逻辑为:有连接请求的时候就接收并新建socket加入到el中去,并设置回调函数为connSocketEventHandler(如果是读事件,这个函数最终还是调用readQueryFromClient)
3 把创建的监听socket添加到关注的事件中去
4 创建IO多线程,设置线程入口函数为IOThreadMain,如果是读事件每个线程处理自己的任务队列的时候,调用的是readQueryFromClient
5 beforesleep函数把任务分配给各个IO线程,等待各个线程执行完毕,然后自己的也执行完毕
6 在aemain事件循环中,获取当前可读事件个数,逐个去执行回调函数。
我的疑问是:
IO线程也是执行readQueryFromClient函数,主线程调用回调的时候本质也是执行readQueryFromClient,那么redis就会有执行命令的时候线程切换的问题,但是执行命令的时候又好像是只有主线程在执行,如果只有主线程执行的话,readQueryFromClient这个函数哪里做了判断?
相似问题