redis单线程模型的疑问

发布于 2022-09-11 20:51:13 字数 125 浏览 15 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鯉魚旗 2022-09-18 20:51:13

一个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);   // 此处做了客户端请求的处理。
    }    
}
波浪屿的海角声 2022-09-18 20:51:13

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文