nginx的多进程模型
nginx也支持多线程模型,但是多进程模型有更多的优势,默认是多进程模型
nginx在启动后会有一个master进程和多个worker进程。master进程主要用来管理worker,包含接受来自外界的信号,向个worker进程发送信号,监控worker进程的运行状态,当worker进程退出后,会自动重新启动新的worker进程。而基本的网络事件,则是在worker进程中来处理了,比如accept()。多个worker进程直接是对等的,他们同等竞争来自客户端的请求,各进程之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其他worker进程的请求。worker进程的个数是可以设置的,一般设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及时间处理模型是分不开的。
nginx多进程模型的好处
1.对于每个worker进程来说,独立的进程不需要枷锁,省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。
2.采用独立的进程,可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则会很快启动新的worker进程。
3.如果worker进程的异常退出,肯定是程序有bug了,异常退出会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。