学习永无止境
写这个文章之前,我也参考了很多关于学习Nginx的文章和博客,特别是淘宝的文档
感觉自己精进不少。
该文章会分为四个部分,对于理解和学习Nginx或许会有新的帮助和见识。
1.Nginx中的Epoll与信号
Nginx在Linux下的epoll_wait阻塞等待后,worker进程还需要处理信号事件,这个时候信号量的抵达会打断epoll_wait阻塞,产生一个内核打断进程执行态错误,在Linux下有几种信号量是比较常用的。

下面说说几个重要的信号量
2 . SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程
14 . SIGALRM 滴答信号(我定义的)
17 . SIGCHLD 子进程结束时, 父进程会收到这个信号
2.Nginx中定时器与信号
Nginx中实现了定时器,主要是对连接和处理进行定时操作,例如连接Nginx后,但未在30秒内发送任何数据到Nginx时,Nginx会关闭连接,我最开始时不明白,查了很多博客和文章只是说Nginx用红黑树来保存和处理定时。
那Nginx的worker进程阻塞在epoll_wait时,需要定时打断这种阻塞来实现程序运行,epoll_wait是程序级别,需要打断这种组晒就需要更高级别的打断,那就是信号中断了,根据定时器的原理,需要隔一定时间运行一次,SIGALRM信号就是这种特性,滴答滴答。
网友评论