1. 程式人生 > 其它 >提高伺服器併發能力的理論

提高伺服器併發能力的理論

 如何提高伺服器併發能力,理論依據、方法是什麼

  吶,一臺伺服器,到底能處理多少併發?1萬,10萬,一百一千萬?由什麼決定呢?

  不用說,最終肯定是由硬體決定!更強的cpu、更大的記憶體、更高的頻寬、更高速的io裝置……來一臺IBM大型機,再菜的鳥也能整到百萬併發

  轉載請註明原著:部落格園老鍾https://www.cnblogs.com/littlecarry/

  討論硬體沒有多大意義

  我們要討論的事,普通固定硬體條件下,如何提升伺服器的併發能力

  併發,也就是單位時間裡伺服器處理的最大請求數,通常定義為1秒時間內。

  針對外部訪問,伺服器的行為概括為:連線請求、處理請求

  1、連線請求

   基於NIO多路複用技術

   NIO多路複用技術,可以讓上億的請求,同時連在一臺伺服器管理

  2、處理請求

   儘量縮短每一個請求的執行時間

   一個請求執行的時間越短,單位時間內能處理的請求就越多。一個請求的執行,可能涉及網路IO、硬碟IO、記憶體的讀寫,縮短或遮蔽這些讀寫,將大大提升執行速度。

   要提升伺服器併發能力,就是要提升“連線請求”、“處理請求”的處理能力,核心是找出他們的效能瓶頸、改善效能瓶頸

效能瓶頸包括:

  1、作業系統的IO讀寫能力瓶頸

    涉及:網路IO、硬碟IO、記憶體等

    提升方法:零拷貝、DMA、快取等

  2、系統資源瓶頸

    涉及:執行緒數量、鎖競爭、記憶體申請釋放、系統引數配置等

    提升方法:1)執行緒越多,作業系統切換執行緒上下文消耗越大,執行緒少,IO的阻塞可能導致系統空轉。通過實際除錯分配合適的執行緒數量

         2)鎖的種類很多,悲觀、樂觀,重入等等,選擇合適的鎖,能提升資源的競爭率。所有的鎖都是悲觀鎖,是不可取的。

         3)記憶體合理的申請、釋放,能節約資源的消耗

         4)系統引數、jvm引數,很多根據實際情況分配

  3、程式碼能力瓶頸

    涉及:程式碼架構、程式碼邏輯、程式碼對記憶體的操作等

小結:

  效能瓶頸改善,主要針對處理請求的能力的提升連線請求的能力也同步提升。

  很多網上說nginx的併發量是2萬、5萬、6萬……,都是不對的

,一是nginx的程式碼架構,並沒有對併發量的約束,二是脫離了硬體。nginx的架構沒有約束連線請求,“處理請求”,就看你對效能瓶頸的改善,以及你的硬體了,這兩點提升了,併發佰億可能不是問題

  當然,這裡還有一個“單機效能”的問題,不用切換執行緒的作業系統,執行當然最快。所以需要處理百萬級別的併發,分散式處理效率才是最高的

  本文只是提供基本的理論思路,很多具體的方法不細說,得自行查詢