Linux的Nginx五:进程|过程
進(jìn)程
master進(jìn)程
Nginx在啟動后,會有一個master進(jìn)程和多個worker進(jìn)程。master進(jìn)程主要用來管理worker進(jìn)程,包含:接收來自外界的信號,向各worker進(jìn)程發(fā)送信號,監(jiān)控 worker進(jìn)程的運行狀態(tài),當(dāng)worker進(jìn)程退出后(異常情況下),會自動重新啟動新的worker進(jìn)程。
worker進(jìn)程
基本的網(wǎng)絡(luò)事件,則是放在worker進(jìn)程中來處理了。多個worker進(jìn)程之間是對等的,他們同等競爭來自客戶端的請求,各進(jìn)程互相之間是獨立的。一個請求,只可能在一個worker進(jìn)程中處理,一個worker進(jìn)程,不可能處理其它進(jìn)程的請求。worker進(jìn)程的個數(shù)是可以設(shè)置的,一般我們會設(shè)置與機(jī)器CPU核數(shù)一致,這里面的原因與Nginx的進(jìn)程模型以及事件處理模型是分不開的。
?
過程
1.啟動--Nginx在啟動時,會解析配置文件,得到需要監(jiān)聽的端口與IP地址,
2.初始化-然后在Nginx的master進(jìn)程里面,先初始化好這個監(jiān)控的socket(創(chuàng)建socket,設(shè)置addrreuse等選項,綁定到指定的IP地址端口,再listen),
3.多進(jìn)程--然后再fork(一個現(xiàn)有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)建一個新進(jìn)程。由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程(work進(jìn)程) )出多個子進(jìn)程出來,然后子進(jìn)程會競爭accept新的連接。?
4.連接--此時,客戶端就可以向Nginx發(fā)起連接了。當(dāng)客戶端與Nginx進(jìn)行三次握手,與Nginx建立好一個連接后,某一個子進(jìn)程會accept成功,得到這個建立好的連接的socket,然后創(chuàng)建Nginx對連接的封裝,即ngx_connection_t結(jié)構(gòu)體。?
5.交換--接著,設(shè)置讀寫事件處理函數(shù)并添加讀寫事件來與客戶端進(jìn)行數(shù)據(jù)的交換。最后,Nginx或客戶端來主動關(guān)掉連接,到此,一個連接就壽終正寢了。
應(yīng)用
在近期一些項目的開發(fā)過程中,主要是使用Nginx和Tomcat來搭建高性能負(fù)載均衡集群,
即使用Nginx的反向代理功能來實現(xiàn)請求的分發(fā),關(guān)于Nginx和Tomcat的組合使用,不在這里重復(fù)造輪子
?
總結(jié)
以上是生活随笔為你收集整理的Linux的Nginx五:进程|过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。