浏览 691
如果在某个location里面定义一些指令,发现这些指令并不是按照他们生命和定义的顺序执行的。
那么他们执行的顺序是什么样子的? 是按照指定所在的模块所处的阶段以及模块在某一个阶段中模块的位置决定的吗?
比如如下的定义:
location /test {
directive A;
directive B;
directive C;
}
如果A,B指令所处的模块是content阶段,而且模块B位于模块A前面(只是假设), 指令C所处的模块是 rewrite阶段.
那么指令ABC的执行顺序就是 C , B , A 。
请问这样的理解对吗?
按点赞数排序
按时间排序
1、非脚本类的指令的顺序:1)先根据阶段,就像你说的;2)同一阶段内的模块之间,在configure时会决定顺序;
2、脚本类指令,如set、if等,是有顺序的,谁在前就先执行谁
1
回答于2021-03-05 13:49
简言之,就是内核将Socket缓冲区情况通知给用户态进程的接口。概括为以下4点:
1、TCP由内核实现的,epoll是内核提供给应用进程的接口;
2、当TCP连接需要发送数据时,Socket缓冲区上必须有空闲位置。内核接收到对方的ACK报文,才能释放掉发送报文(否则要反复重发),产生空闲位置。
3、当TCP连接需要接收数据时,必须是Socket缓冲区上已经有数据了,否则read函数就会阻塞。epoll_wait可以完成2、3两个步骤(包括三次握手)的通知。
4、当你就某个TCP连接需要接收内核通知时,通过epoll_ctl函数告诉内核即可。