Nginx進程模型

1.Nginx是多進程 or 多線程 ?

一般狀況下:Nginx採用多進程模式,每一個woker進程擁有一個主線程去響應處理多個用戶請求;同時Nginx支持使用AIO線程池去讀取和發送大文件,避免woker進程被堵塞。多線程

2.Nginx多進程單線程

每一個woker進程擁有一個主線程,在epoll支持下,採用異步非阻塞方式來處理請求,從而實現高併發;相對於多線程來講:每一個請求佔用量小,沒有上下文切換帶來的開銷,事件處理十分輕量。
備註:httpd工做方式一般爲多線程,每一個用戶請求獨佔一個線程,當併發數到達上千的時候,同時會有上千個線程在處理請求,線程帶來的內存佔用很是大,線程的上下文切換帶來的cpu開銷也很大併發

3.Nginx進程設計

Nginx主要採用Master/Woker進程設計的方式:Master進程主要用來管理Worker進程生命週期;Woker進程主要去處理用戶請求。負載均衡

1. 利用多核:多woker進程能充分利用多核系統帶來的併發處理能力
2. woker進程高可用:當woker進程掛掉後,master進程可以從新申請建立新的woker進程
3. 負載均衡:woker進程間能夠通訊,從而一個請求的到來能夠協商分配到負載較低的woker進程上去處理

備註:咱們一般會設置woker進程數量和CPU核數保持一致:CPU親和性或綁定woker進程到指定cpus上能夠避免進程上下文切換帶來的開銷、cpu資源競爭及cache失效等問題異步

4.對比Apache

輕量級:Nginx佔用更少的內存及資源
抗併發:Apache是同步阻塞型,在高併發下Nginx能保持低消耗高性能
高度模塊化:Nginx高度模塊化設計使擴展功能更加簡單模塊化

相關文章
相關標籤/搜索