Nginx 源码调试记录
虽然Nginx在事件到来时有post机制来讲事件分别处理,但是在测试的时候,并没有触发post机制,所有事件都是立即处理的。后续研究什么情况下会触发post队列机制。
post队列机制与accept_mutex 有关,只有当nginx配置文件中打开accept_mutex配置项才能实现负载均衡以及惊群问题解决等问题。而accept_mutex(nginx1.18.0)在实际测试中默认是关闭的,所以出现了以上不孬触发post,所有连接事件都是立即处理的问题,开启accept_mutex之后,进程会尝试获取acept锁,并且会将事件添加到post队列,等待后续处理。
修改post相关函数,实现在处理连接时 区分 当前执行的是哪个post队列。
背景:Nginx事件处理中,只要使用了post队列机制,那么事件都会延后处理,并且在处理过程中,处理完accept_events之后便会释放accept_mutex锁,然后再处理已有连接的读写事件以及定时器事件等。但是**两个post队列是使用的同一个处理函数进行的调用,因此想在该函数中区分当前处理的是哪个队列的事件,需要修改源码的三个位置,分别是函数声明、定义和调用出的代码。
修改代码:
- 修改声明:在
nginx/src/event/ngx_event_posted.h
中进行修改:
void n