nginx為什麼比apache快
nginx為什麼比apache快?
先總結的說幾個概念:
1:nginx在高併發的情況下比apache快,低併發體現不明顯
#2:快的原因得益於nginx的epoll模型
#apache是多執行緒或多進程,在工作的時候,當來了一個http回應,一個行程接收(listen)–>識別處理—>返回請求,在此過程中,一個進程全部處理,apche 對於套接字的I/O,讀或者寫,但是讀或者寫都是阻塞的,阻塞意味著進程就得掛起進入sleep狀態,那麼一旦連線數很多,Apache必然要產生更多的進程來回應請求,一旦進程多了,CPU對於進程的切換就頻繁了,很耗資源和時間,所以就導致apache效能下降了,說穿了就是處理不過來這麼多進程了。
Nginx採用epoll模型,非同步非阻塞。對Nginx來說,把一個完整的連線請求處理都分成了一個事件,一個一個的事件。例如accept(), receive(),磁碟I/O,send()等,每部分都有對應的模組去處理,一個完整的請求可能是由幾百個模組去處理。真正核心的就是事件收集和分發模組,這就是管理所有模組的核心。
只有核心模組的調度才能讓對應的模組佔用CPU資源,從而處理請求。拿一個HTTP請求來說,首先在事件收集分發模組註冊感興趣的監聽事件,註冊好之後不阻塞直接返回,接下來就不需要再管了,等待有連接來了內核會通知你(epoll的輪詢會告訴進程),cpu就可以處理其他事情去了。
一旦有請求來,那麼對整個請求分配相應的上下文(其實已經預先分配好),這時候再註冊新的感興趣的事件(read函數),同樣客戶端數據來了內核會自動通知進程可以去讀資料了,讀了資料之後就是解析,解析完後去磁碟找資源(I/O),一旦I/O完成會通知進程,進程開始給客戶端發回資料send(),這時候也不是阻塞的,呼叫後就等內核發回通知發送的結果就行。
整個下來把一個請求分成了很多個階段,每個階段都到很多模組去註冊,然後處理,都是非同步非阻塞。非同步這裡指的就是做一個事情,不需要等待返回結果,做好了會自動通知你。
在網路上找到了一個例子:
可以舉一個簡單的例子來說明Apache的工作流程,我們可以平常去餐廳吃飯。餐廳的工作模式是一個服務員全程服務客戶,流程是這樣,服務員在門口等候客人(listen),客人到了就接待安排的餐桌上(accept),等著客戶點菜(request uri),去廚房叫師傅下單做菜(磁碟I/O),等待廚房做好(read),然後給客人上菜(send),整個下來服務員(進程)很多地方是阻塞的。
這樣客人一多(HTTP請求一多),餐廳只能透過叫更多的服務員來服務(fork進程),但是由於餐廳資源是有限的(CPU),一旦服務員太多管理成本很高(CPU上下文切換),這樣就進入一個瓶頸。
再來看看Nginx得怎麼處理?餐廳門口掛個門鈴(註冊epoll模型的listen),一旦有客人(HTTP請求)到達,派一個服務員去接待(accept),之後服務員就去忙其他事情了(比如再去接待客人),等這位客人點好餐就叫服務員(數據到了read()),服務員過來拿走菜單到廚房(磁碟I/O),服務員又做其他事情去了,等廚房做好了菜也喊服務員(磁碟I/ O結束),服務生再幫客人上菜(send()),廚房做好一個菜就給客人上一個,中間服務生可以去幹其他事情。
整個過程被切分成很多個階段,每個階段都有對應的服務模組。我們想想,這樣一旦客人多了,餐廳也能招待更多的人。
更多Nginx技術文章,請造訪Nginx使用教學專欄!
以上是nginx為什麼比apache快的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

在CentOS系統上部署ZooKeeper集群,需要以下步驟:環境準備安裝Java運行環境:使用以下命令安裝Java8開發工具包:sudoyuminstalljava-1.8.0-openjdk-devel下載ZooKeeper:從ApacheZooKeeper官方網站下載適用於CentOS的版本(例如ZooKeeper3.8.x)。使用wget命令下載,並替換zookeeper-3.8.x為實際版本號:wgethttps://downloads.apache.or

解決CentOS系統故障的方法有很多,以下是一些常見的步驟和技巧:1.檢查日誌文件/var/log/messages:系統日誌,包含各種系統事件。 /var/log/secure:安全相關日誌,如SSH登錄嘗試。 /var/log/httpd/error_log:如果使用Apache服務器,這裡會有錯誤信息。 2.使用診斷工具dmesg:顯示內核環緩衝區的內容,有助於了解硬件和驅動問

問題:如何啟動 Nginx?答案:安裝 Nginx啟動 Nginx驗證 Nginx 是否已啟動探索其他啟動選項自動啟動 Nginx
