<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不了解 QPS、TPS、RT、并發(fā)數(shù)、吞吐量,勸你簡歷別寫熟悉高并發(fā)

          共 2202字,需瀏覽 5分鐘

           ·

          2020-08-26 21:30

          吞吐量

          在了解qps、tps、rt、并發(fā)數(shù)之前,首先我們應該明確一個系統(tǒng)的吞吐量到底代表什么含義,一般來說,系統(tǒng)吞吐量指的是系統(tǒng)的抗壓、負載能力,代表一個系統(tǒng)每秒鐘能承受的最大用戶訪問量。

          一個系統(tǒng)的吞吐量通常由qps(tps)、并發(fā)數(shù)來決定,每個系統(tǒng)對這兩個值都有一個相對極限值,只要某一項達到最大值,系統(tǒng)的吞吐量就上不去了。

          QPS

          Queries Per Second,每秒查詢數(shù),即是每秒能夠響應的查詢次數(shù),注意這里的查詢是指用戶發(fā)出請求到服務器做出響應成功的次數(shù),簡單理解可以認為查詢=請求request。

          qps=每秒鐘request數(shù)量

          TPS

          Transactions Per Second 的縮寫,每秒處理的事務數(shù)。一個事務是指一個客戶機向服務器發(fā)送請求然后服務器做出反應的過程。客戶機在發(fā)送請求時開始計時,收到服務器響應后結束計時,以此來計算使用的時間和完成的事務個數(shù)。

          針對單接口而言,TPS可以認為是等價于QPS的,比如訪問一個頁面/index.html,是一個TPS,而訪問/index.html頁面可能請求了3次服務器比如css、js、index接口,產生了3個QPS。

          RT

          Response Time縮寫,簡單理解為系統(tǒng)從輸入到輸出的時間間隔,寬泛的來說,他代表從客戶端發(fā)起請求到服務端接受到請求并響應所有數(shù)據(jù)的時間差。一般取平均響應時間。

          并發(fā)數(shù)

          簡而言之,系統(tǒng)能同時處理的請求/事務數(shù)量。

          計算方式

          QPS = 并發(fā)數(shù) / RT 或者 并發(fā)數(shù)= QPS * RT

          舉個栗子:

          假設公司每天早上9點到10點1個小時內都有員工要上廁所,公司有3600個員工,平均每個員工上廁所時間為10分鐘,我們來計算一下。

          QPS ? ?= 3600/(60*60) ? 1

          RT ? ? = 10*60 ? ? ? ? ? ?600秒

          并發(fā)數(shù) = 1 * 600 ? ? ? ? ?600

          這樣就意味著如果想達到最好的蹲坑體驗,公司需要600個坑位來滿足員工需求,否則的話上廁所就要排隊等待了。

          性能思考

          按照 QPS = 并發(fā)數(shù) / RT 公式,假設我們現(xiàn)在是單線程的場景,那么 QPS 公式應該是這樣:QPS= 1/RT,實際上 RT 應該= CPU time + CPU wait time,如果將線程數(shù)提高到2,那么QPS = 2/(CPU time + CPU wait time),那么是否意味著我們只要單純提高線程數(shù)就能提高QPS呢?

          最佳線程數(shù)計算

          假設CPU time是49ms,CPU wait time是200ms,那么QPS=1000ms/249ms=4.01,這里200ms的wait時間我們可以認為CPU一直處于等待狀態(tài)啥也沒干,理論上來說200ms還可以接受200/49≈4個請求,不考慮上下文切換和其他開銷的話,可以認為總線程數(shù)=(200+49)/49=5,如果再考慮上CPU多核和利用率的問題,我們大致可以認為:最佳線程數(shù)=RT/CPU Time * CPU核心數(shù) * CPU利用率

          那么最大 QPS公式推導為:

          最大 QPS = 最佳線程數(shù)單線程 QPS=(RT/CPU Time * CPU核心數(shù) * CPU利用率)(1/RT) = CPU核心數(shù)*CPU利用率/CPU time

          那么這樣是否意味著我們只要不停增加CPU核心數(shù)就能無限提高QPS呢

          阿姆達爾定律Amdahl

          G.M.Amdahl在1967年提出了Amdahl’s law,針對并行處理的scalability給出了一個模型,指出使用并行處理的提速由問題的可并行的部分所決定。我們可以簡單理解為程序通過額外的計算資源,理論上能獲得的加速值。

          par為并行計算所占的比例,p為并行處理節(jié)點個數(shù)

          假設你想從望京去順義,坐一輛車需要3小時,雖然現(xiàn)在有3輛車,你也不能1小時就到。這里無法并行,所有Par=0%,p=3,加速比還是等于1,并沒有提高速度。

          古斯塔夫森定律Gustafson

          斯塔夫森定律又被稱為擴展的 加速比(scaled speedup),他說明處理器個數(shù)、串行比例和加速比之間的關系,只是和阿姆達爾定律側重角度有所不同。

          按照阿姆達爾定律和QPS計算公式,在CPUtimeCPU 利用率不變的情況下,增加 CPU核心數(shù)就能增加最大QPS,在 par 不為0即并行的時候,增加并行數(shù)量 p 就能提升效率,但是實際上隨著請求數(shù)量的增加,帶來大量的上下文的切換、gc和鎖變化。qps更高,產生對象越多,gc越頻繁,cpu time和利用率都受到影響,尤其在串行的時候,鎖自旋、自適應、偏向等等也成為影響par的因素。

          總結

          為了提升達到最好的性能,我們需要不斷的進行性能測試,調整小城池大小,找到最合適的參數(shù)來達到提高性能的目的。

          原創(chuàng)不易,燃燒秀發(fā)輸出內容,如果有一丟丟收獲,點個贊鼓勵一下吧!

          理了幾百本各技術電子書,送給小伙伴們。關注公號回復【666】自行領取。和一些小伙伴們建了一個技術交流群,一起探討技術、分享技術資料,旨在共同學習進步,如果感興趣就加入我們吧!


          關注,邁開成長的第一步
          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产极品在线看 | 九九免費视频 | 久久婷婷免费视频 | 亚洲视频1 | 一级特黄色大片 |