文章目录希望打开此篇对你能有所帮助。
- 惊群问题解决思路
- 条件变量为什么不学着点?
- 对于 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惊群的场景,不过我不希望会见识到。



