栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

nginx 惊群问题解决 && 条件变量虚假唤醒为什么不学着点?

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx 惊群问题解决 && 条件变量虚假唤醒为什么不学着点?

希望打开此篇对你能有所帮助。

文章目录
    • 惊群问题解决思路
    • 条件变量为什么不学着点?
    • 对于 epoll 惊群的想法

惊群问题解决思路

和本文主旨无关的代码我就不放了,上一篇有,因为事关上一篇的主旨。

void ngx_process_events_and_timers(ngx_cycle_t *cycle)
{
    ···
 
    
    if (ngx_use_accept_mutex) {
        //负载均衡处理
        if (ngx_accept_disabled > 0) {
            ngx_accept_disabled--;
 
        } else {
            //调用ngx_trylock_accept_mutex方法,尝试获取accept锁
            if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
                return;
            }
 
            //拿到锁
            if (ngx_accept_mutex_held) {
                
                flags |= NGX_POST_EVENTS;
            } else {
                
                if (timer == NGX_TIMER_INFINITE
                    || timer > ngx_accept_mutex_delay)
                {
                    timer = ngx_accept_mutex_delay;
                }
            }
        }
    }
 
   ···
}

条件变量为什么不学着点?

就拿老生常谈的生产消费者模型来说:为什么会觉得我生产一次的面包只够一个人吃呢?


对于 epoll 惊群的想法

其实挺羡慕那些能讨论 epoll 惊群的小伙伴,我还没试过epoll惊群,据说是开了多条线程或者多个进程,然后挂一个epoll上了是吧,事件到来的时候就会通知一大堆。

不晓得哦,不过我看 nginx 是一个进程一个 epoll 吧。之前看muduo使用reactor模型也是,在mainloop上挂一个epoll,其他subloop都放一个eventfd在mainloop上。

不晓得,不晓得哦,应该是我还没机会见识到epoll惊群的场景,不过我不希望会见识到。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号