redis单线程模型的疑问

在学习Redis的时候有一些疑问,疑问如下:

  1. Redis的单线程只是在处理网络请求的时候采用 epoll 实现单线程的吗?当展开其他工作(比如:处理连接请求,处理查询请求)的时候是再开一个线程吗?
阅读 3k
2 个回答

一个for 循环里面跑的,可以看看 network.c 的源代码。

 void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
    int cport, cfd, max = MAX_ACCEPTS_PER_CALL;
    char cip[NET_IP_STR_LEN];
    UNUSED(el);
    UNUSED(mask);
    UNUSED(privdata);

    while(max--) {
        cfd = anetTcpAccept(server.neterr, fd, cip, sizeof(cip), &cport);
        if (cfd == ANET_ERR) {
            if (errno != EWOULDBLOCK)
                serverLog(LL_WARNING,
                    "Accepting client connection: %s", server.neterr);
            return;
        }    
        serverLog(LL_VERBOSE,"Accepted %s:%d", cip, cport);
        acceptCommonHandler(cfd,0,cip);   // 此处做了客户端请求的处理。
    }    
}

有一本书叫<<redis的设计与实现>>, 里面的第12章事件应该可以解决你的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题