Nginx支持比Apache高并發的原因

1.先從各自使用的多路復用IO模型說起:
??
select模型:(apache使用,由于受模塊等限制,用的不多)
??

  1. 單個進程能夠?監視的文件描述符的數量存在最大限制
  2. select()所維護的?存儲大量文件描述符的數據結構?,隨著文件描述符數量的增長,其在用戶態和內核的地址空間的復制所引發的開銷也會線性增長
  3. 由于網絡響應時間的延遲使得大量TCP連接處于非活躍狀態,但調用select()還是會對?所有的socket進行一次線性掃描?,會造成一定的開銷

poll:

poll是unix沿用select自己重新實現了一遍,唯一解決的問題是poll?沒有最大文件描述符數量的限制

epoll模型:(nginx使用)

epoll帶來了兩個優勢,大幅度提升了性能:

  1. 基于事件的就緒通知方式?,select/poll方式,進程只有在調用一定的方法后,內核才會對所有監視的文件描述符進行掃描,而epoll事件通過epoll_ctl()注冊一個文件描述符,一旦某個文件描述符就緒時,內核會采用類似call back的回調機制,迅速激活這個文件描述符,epoll_wait()便會得到通知
  2. 調用一次epoll_wait()獲得就緒文件描述符時,返回的并不是實際的描述符,而是一個代表就緒描述符數量的值,拿到這些值去epoll指定的一個數組中依次取得相應數量的文件描述符即可,這里使用內存映射(mmap)技術,?避免了復制大量文件描述符帶來的開銷

當然epoll也有一定的局限性,?epoll只有Linux2.6才有實現?,而其他平臺都沒有,這和apache這種優秀的跨平臺服務器,顯然是有些背道而馳了。

簡單來說epoll是select的升級版,單進程管理的文件描述符沒有最大限制。但epoll只有linux平臺可使用。作為跨平臺的Apache沒有使用。

2.再看一下Apache常用的兩種并發策略:

? ? ??1)?perfork模式的工作原理:??
? ? ? ? ? ? ? ? ? ? 當Apache被啟動時,Apache會自動創建StartServers個進程,并且盡力將空閑進程數保持在MinSpareServers和MaxSpareServers之間。
????????????? ? ? ??如果空閑進程小于MinSpareServers,Apache將會以大約每秒1個的速度新建進程。
? ? ? ? ? ? ? ? ? ? 如果空閑進程小于MaxSpareServers,Apache將會刪除多余的空閑進程,釋放服務器資源。
? ? ? ? ? ? ? ? ? ??進程數的最大值由MaxClients控制,在Apache1.3中最大只能設置為256,但在Apache2.0中,可以通過在配置開頭增加ServerLimit項目來突破256的限制,此時必須MaxClients ?≤ ServerLimit ≤ 20000
? ? ? ? ? ? ? ? ? ??MaxRequestsPerChild用來控制每個進程在處理了多少次請求之后自動銷毀,這個參數可以設置為0表示無限(即不銷毀進程)

? ? ?2) worker模式的工作原理:
? ? ? ? ? ??由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild線程數,各個線程獨立地處理請求。
? ? ? ? ? ??同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閑線程數;而MaxClients設置允許的最大線程總數。
? ? ? ? ? ??如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程。
? ? ? ? ? ?每個子線程處理服務請求次數由MaxRequestPerChild定義。 缺省的設置值為0,即響應無限此請求。
? ? ? ? ? ?默認生成3個子進程來處理請求。

??兩種策略的缺陷:
? ? ? ??perfork模式:每一個連接創建一個進程,每個進程內單線程。對于一個負載相對較高的網站來說,256的進程限制是不夠的,如果服務器已經達到256的極限,那么接下去的訪問就需要排隊,這也就是為什么某些服務器負載不高,但是訪問卻很慢的原因之一。

? ? ? ??worker模式:也是多進程處理,也會創建多個進程和多個線程,如果進程數達到管理員設置的閥值,則會拒絕新的請求。
? ? ? ?兩種模式都會創建多個進程或線程,而每個進程或線程都會為其分配cpu和內存(線程要比進程小的多,所以worker支持比perfork高的并發),并發過大會榨干服務器資源。


3.Nginx的工作原理:

? ? ??Nginx并不會為每一個的web請求創建新的進程,相反,管理員可以配置Nginx主進程的工作進程的數量(一個常見的做法是為每一個CPU配置一個工作進程)。所有這些進程都是單線程的。
? ? ? 每一個工作進程可以處理數千個并發的請求。它通過一個線程來異步非阻塞的完成了這些工作(epoll),而沒有使用多線程的編程模型。

?
? nginx的優勢:

? ? ? 采用單線程來異步非阻塞處理請求,不會為每個請求分配cpu和內存資源,節省了大量資源,同時也減少了大量的CPU的上下文切換。所以才使得Nginx支持更高的并發。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用pdf.js開發嵌入pdf顯示,以及利用jquery-ui左右分欄顯示

原來考慮用pdf.js的viewer.html頁面&#xff0c;但怎么用都不方便。因此直接用pdf.js在左側連續顯示pdf所有內容&#xff0c;右側顯示其它相關內容&#xff0c;并且左右寬度可以任意拖動&#xff0c;最終實現效果如圖&#xff1a; 代碼&#xff1a;<!DOCTYPE html><ht…

十三、制作 iVX音樂分享小程序

功能介紹 通過前幾節的學習&#xff0c;我們對完成一個應用已經有了一些自己的心得。在此再次再制作一個小的音樂小程序應用。該應用一共分為首頁、榜單頁、音樂分享頁和音樂搜索頁。 首頁&#xff1a; 榜單內容頁&#xff1a; 音樂分享頁&#xff1a; 音樂搜索頁&#xff1a…

01_反射_02_反射類的構造方法

【工程截圖】 【Person.java】 //將要被反射的類 package com.Higgin.reflect; import java.util.List;public class Person {private String name"NULL";private int age0;public Person(){System.out.println("構造方法&#xff1a;Person()");}public P…

西北師范大學地理與環境科學學院考研真題匯總(自然地理學)持續更新。。。

西北師范大學地理與環境學科學院研究生入學考試的所有專業(地圖學與地理信息系統、自然地理學、人文地理學、環境科學、環境工程)的專業課均為自然地理學,本文持續收集整理歷年自然地理學考研入學考試真題。 1998年 一、名詞 1. 焚風 2. 徑流模數 3. 趨同適應 4. 墨卡托…

Android之提示type checking has run into a recrusive problem. Easiest workaround: specify types of your

1 問題 寫kotlin的時候錯誤提示如下 type checking has run into a recrusive problem. Easiest workaround: specify types of your declarations explicitly 2 分析 我寫得是遞歸函數如下&#xff0c;錯誤提示就是上面&#xff0c;是因為我們寫返回值&#xff0c;才導致 s…

私有云搭建 OpenStack(centos7.3, centos-release-openstack-ocata)

OpenStack&#xff08;centos7.3,centos-release-openstack-ocata&#xff09;nova&#xff1a;計算節點queue&#xff1a;消息隊列&#xff0c;系統瓶頸所在scheduler&#xff1a;調度機制conductor&#xff1a;更新數據庫cert&#xff08;objectstore&#xff09;&#xff1a…

C# 類繼承中的私有字段都去了哪里?

最近在看 C 類繼承中的字段內存布局&#xff0c;我就很好奇 C# 中的繼承鏈那些 private 字段都哪里去了? 在內存中是如何布局的&#xff0c;畢竟在子類中是無法訪問的。一&#xff1a;舉例說明 為了方便講述&#xff0c;先上一個例子&#xff1a;internal class Program{stati…

大型分布式網站架構技術總結

本文是學習大型分布式網站架構的技術總結。對架構一個高性能&#xff0c;高可用&#xff0c;可伸縮&#xff0c;可擴展的分布式網站進行了概要性描述&#xff0c;并給出一個架構參考。一部分為讀書筆記&#xff0c;一部分是個人經驗總結。對大型分布式網站架構有很好的參考價值…

python 數據分析找到老外最喜歡的中國美食【完整代碼】

一、環境及依賴 語言&#xff1a;python3.8 抓取&#xff1a;selenium 代理&#xff1a;ipide **注&#xff1a;**想要完整代碼的在末尾&#xff0c;注意新手建議慢慢看完。在此提示一下本篇文章的編寫步驟&#xff1a;1.獲取數據、2.翻譯、3.數據清洗、4.切詞詞權重、5.詞云 …

Android之檢查跳轉的Activity是否存在

1、需求 android我們知道經常會跳各種設置頁面,比如設置默認瀏覽器頁面、設置添加快捷方式權限頁面,我們會根據機型進行適配,但是有時候如果找到也找個頁面不try catch操作程序會奔潰 2、檢查跳轉的Activity是否存在代碼實現 public static boolean hasActivity(Context co…

hihoCoder 1257 Snake Carpet(很簡單的構造方法)

2015 ACM / ICPC 北京現場賽 I 題 構造 注意一個小坑&#xff0c;每條蛇的輸出是要從頭到尾輸出的。 還要注意的是&#xff0c;不能開數組去模擬構造過程&#xff0c;然后輸出&#xff0c;那樣會TLE的。 #include <cstdio> #include <cstring> #include <cmath&…

西北師范大學地理與環境科學學院考研真題匯總(高等數學)持續更新。。。

西北師范大學地理與環境學科學院研究生入學考試的所有專業(地圖學與地理信息系統、自然地理學、人文地理學、環境科學、環境工程)的數學均為自主命題,復習參考教材為同濟大學第五版。

操作系統與多核處理器

這篇文章解答了我心中的疑問&#xff0c;那就是操作系統會自動調度cpu資源來處理多進程&#xff0c;多線程的并發。早在上世紀90年代末&#xff0c;就有眾多業界人士呼吁用CMP(單芯片多處理器)技術來替代復雜性較高的單線程CPU。IBM、惠普、Sun等高端服務器廠商&#xff0c;更是…

Java網絡編程二:Socket詳解

Socket又稱套接字&#xff0c;是連接運行在網絡上兩個程序間的雙向通訊的端點。 一、使用Socket進行網絡通信的過程 服務端&#xff1a;服務器程序將一個套接字綁定到一個特定的端口&#xff0c;并通過此套接字等待和監聽客戶端的連接請求。 客戶端&#xff1a;客戶端程序根據你…

Android之提示Could not find com.android.support:appcompat-v7:25.3.1.

1 問題 編譯第三方項目&#xff0c;錯誤提示如下 Could not find com.android.support:appcompat-v7:25.3.1. Required by:project :sampleproject :sample > com.yanzhenjie:permission:1.0.7project :sample > com.yanzhenjie.alertdialog:alertdialog:1.0.1 Search …

在 .NET 中使用 FixedTimeEquals 應對計時攻擊

計時攻擊 在計算機安全中&#xff0c;計時攻擊&#xff08;Timing attack&#xff09;是旁道攻擊 &#xff08;Side-channel attack&#xff09; 的一種&#xff0c;而旁道攻擊是根據計算機處理過程發出的信息進行分析&#xff0c;包括耗時&#xff0c;聲音&#xff0c;功耗等…

解讀大型網站系統架構的演化

解讀大型網站系統架構的演化 大型網站的架構是根據業務需求不斷完善的&#xff0c;根據不同的業務特征會做特定的設計和考慮&#xff0c;本文只是講述一個常規大型網站會涉及的一些技術和手段。作者&#xff1a;李平來源&#xff1a;LEE的博客前言 一個成熟的大型網站&#xff…

【ArcGIS風暴】西北地區氣象臺站年均NDVI與年均氣溫和降水的相關性分析

在研究植被動態變化與氣候的關系時,通常通過計算植被NDVI值與氣溫和降水的相關系數來描述相關性的大小。如下圖所示,計算了西北地區分布的氣象臺站與氣溫和降水的相關性并作圖可視化。 下面詳細說明整個實現過程。 一、計算相關系數 1. 原理分析 通過計算年均N…

python 全解坦克大戰 輔助類 附完整代碼【雛形】

我正在博客之星評選&#xff0c;歡迎投票給我 會從投票人中抽獎機械鍵盤書&#xff0c;中了會私聊地址 投票連接是&#xff1a;https://bbs.csdn.net/topics/603955346 投票連接是&#xff1a;https://bbs.csdn.net/topics/603955346 投票連接是&#xff1a;https://bbs.csdn.…

vc++ mfc中拖動效果的實現 借助于CImageList

拖動是界面編程頻繁使用的一個效果&#xff0c;在windows系統下可謂大行其道。縱觀時下的應用軟件幾乎各個都支持各種各樣拖動的效果&#xff0c;windows7更是把拖動做到了極致。其實說起來拖動的實現也很簡單&#xff0c;對于有句柄的對象都可以通過MoveWindow或SetWindowPos實…