高效能web伺服器-讀書筆記
程序:cpu能夠處理多個請求,在於作業系統通過多執行流體系設計使得多個任務可以輪流使用資源.
多執行流的一般實現是程序,多程序的好處首先在於cpu時間的輪流使用,另外對於cpu計算和i/o(磁碟和網路i/o)操作進行了重疊
大多數程序的時間消耗在i/o操作上.dma技術可以讓cpu不參與i/o操作的全過程,比如程序通過系統呼叫,使得cpu
向網絡卡等裝置發出指令,然後程序掛起,cpu資源釋放,等待i/o完成操作後通過中斷告之程序重新就緒.
程序有自己的位址空間和生命週期.程序維護著龐大的位址空間和上下文資訊,無法共享資料,所以類似於apache
這樣的伺服器在處理大量請求的時候,記憶體大量消耗造成效能瓶頸。多程序的優勢在於穩定和安全. 這也是apache伺服器的一些特點.
執行緒:執行緒由多種實現,有些不是由核心支援的,從核心角度來看,只是乙個普通程序,由使用者態通過一些庫函式模擬實現的
多執行流,多執行緒的管理完全在使用者態完成.這種實現方式下執行緒切換的開銷相比程序要少些,但是他在多處理的伺服器(smp)中表現較差,因為只有核心的程序排程器才有全力分配多個cpu時間片.
posix執行緒另一種實現是linuxthreads,是核心級的執行緒庫,通過clone來建立執行緒,實現原理是將執行緒和輕量級程序進行一對一關聯
程序切換(上下文切換):
程序排程器在必要的時候掛起正在執行的程序,同時恢復以前掛起的程序。
程序被掛起的本質將在cpu暫存器的資料拿出來儲存在核心堆疊中,恢復的時候又放入到cpu暫存器中。
要提高伺服器併發數就是要減少上下文切換,一般就是減少程序,通過執行緒並和i/o策略來設計併發策略
這也是nginx比apache高效的原因之一。
鎖競爭:
伺服器在處理大量併發請求的時候,多個請求處理任務之間也存在一些資源搶占競爭,所以需要一種機制來維持
一般採用鎖機制來控制資源的占用,當乙個任務占用資源的時候,鎖住資源,這時候其他任務都在等待鎖的釋放,這就是鎖競爭的定義
系統呼叫:
程序有使用者態和核心態二種執行模式,程序可以在二種模式下切換,但需要一定開銷.
程序通常執行在使用者態.可以使用cpu和記憶體來完成一些任務(比如數學計算),而當程序需要對硬體外設進行操作必須切換到核心態,這
時將有更多的權利控制整個計算機,當在核心態的任務完成後,程序且會使用者態.
程序切換到核心態的過程對於高階語言開發者來說是透明的.程式通過系統呼叫完成,核心提供一些列的系統呼叫.
使用者態和核心態的分離,動機主要在於提高系統底層安全以及簡化開發模型.』由於系統呼叫涉及程序從使用者態到核心態的切換,導致一定的記憶體空間交換,即上下文切換,所以系統呼叫的開銷是比較昂貴的.
記憶體分配:
web伺服器工作過程中,需要用到大量記憶體,所以記憶體的分配和釋放及其重要.目前主流的伺服器使用各自的策略(改善資料結構和演算法復
雜度減少資料複製時間)來提高效率.比如基於多程序的apache通過記憶體池管理更加安全,但是對於效能的彌補不是特別高.
nginx對於記憶體的良好表現來至於記憶體分配策略,它可以使用多執行緒來處理請求,這使得多個執行緒之間可以共享資源,從而它的記憶體使用量大大減少.另外nginx使用分階段的記憶體分配策略,按需分配,及時釋放,使得記憶體使用量保持在很小的範圍之內,
《Nginx高效能web伺服器詳解》讀書筆記
別人的筆記 nginx是一款免費開源的高效能http伺服器及反向 伺服器,也可以作為郵件伺服器。他的官網是nginx官網以及wiki官網 sudo apt get install nginx安裝完成後即可檢查版本和檢視運 況 有乙個主線程和幾個工作執行緒 直接執行二進位制檔案即可啟動linux伺服器...
NGINX高效能Web伺服器詳解 讀書筆記
第4章 nginx伺服器的高階配置 4.1 針對ipv4的核心7個引數的配置優化 說明 我們可以將這些核心引數的值追加到linux系統的 etc sysctl.conf檔案中,然後使用如下命令使修改生效 sbin sysctl p 1 net.core.netdev max backlog引數 表示...
《Linux高效能伺服器程式設計》 讀書筆記
資料鏈路層可以看成是乙個網絡卡驅動,為上層提供了乙個統一的介面。telnet協議是一種遠端登入協議,它使得我們能在本地完成遠端任務。產生復位報文段的三種情況 訪問不存在的埠 異常終止連線 處理半開啟連線 tcp互動資料流 telnet,ssh 和成塊資料流 ftp tcp利用緊急指標標誌和緊急指標來...