学习基于:http://tengine.taobao.org/book/chapter_02.html
- nginx是基于master和worker的多进程web服务器
- 对于web服务器,事件通常有三种类型:网络事件(用异步非阻塞解决),信号,定时器。
- 采用异步非阻塞方式处理多个并发请求(网络事件)。并且避免我不必要的的上下文切换。
- 对于信号的处理,nginx包含以下特定的信号,代表特定的意义(中断当前进程,改变运行状态了,继续执行)例如:nginx正在等待事件(epoll_wait)时,如果收到信号,在信号处理完函数后,epoll_wait返回作物,然后程序可以再次胶乳epoll_wait调用。
- 由于epoll_wait等函数在调用的时候是可以设置一个超时时间的,所以nginx借助这个超时时间来实现定时器。nginx里面的定时器事件是放在一颗维护定时器的红黑树里面,每次在进入epoll_wait前,先从该红黑树里面拿到所有定时器事件的最小时间,在计算出epoll_wait的超时时间后进入epoll_wait。所以,当没有事件产生,也没有中断信号时,epoll_wait会超时,也就是说,定时器事件到了。这时,nginx会检查所有的超时事件,将他们的状态设置为超时,然后再去处理网络事件。由此可以看出,当我们写nginx代码时,在处理网络事件的回调函数时,通常做的第一个事情就是判断超时,然后再去处理网络事件。
Nginx学习学习总结(一)---nginx事件处理模型
原文:http://www.cnblogs.com/zoudaiyu/p/5483290.html