一塊兒瞭解什麼是高併發

本文原創文章,轉載註明出處,博客地址 https://segmentfault.com/u/to... 第一時間看後續精彩文章。以爲好的話,順手分享到朋友圈吧,感謝支持。程序員

咱們在找工做時,常常在招聘信息上看到有這麼一條:有構建大型互聯網服務及高併發等經驗,想到高併發,咱們第一想到了媒體上常常出現的新聞阿里雙11每秒處理xx萬訂單,瞬間以爲高併發是一種很屌的技術,很高大上,若是像筆者這種沒作過大型服務的普通程序員,在此根據網上的資料,對高併發寫一下我我的的見解算法

高併發的概念

這裏我引用一段架構師之路公衆號究竟啥纔是互聯網架構高併發中的一段話來描述:數據庫

高併發(High Concurrency)是互聯網分佈式系統架構設計中必須考慮的因素之一,它一般是指,經過設計保證系統可以同時並行處理不少請求segmentfault

那麼不少請求,具體達到多少請求才算是高併發系統呢?這個也沒有明確數量上的定義,根據網上不少大型互聯網公司的相關高併發博客,通常PV在千萬級別以上的公司纔會涉及到這個概念,因此若是某個系統的日PV在千萬級別以上,多是一個高併發系統.這裏根據具體業務不一樣,這個數字可能高或者低一些微信

併發與並行的區別

這裏涉及到一個問題,不少同窗搞不清楚併發與並行的區別,這裏我根據我根據知乎上這個問題某位網友的例子,我以爲很好架構

  • 你吃飯吃到一半,電話來了,你一直到吃完了之後纔去接,這就說明你不支持併發也不支持並行
  • 你吃飯吃到一半,電話來了,你停了下來接了電話,接完後繼續吃飯,這說明你支持併發
  • 你吃飯吃到一半,電話來了,你一邊打電話一邊吃飯,這說明你支持並行

併發:你有處理多個任務的能力,不必定同時(一個CPU輪流)併發

並行:有同時處理多個任務的能力(多個CPU同時)分佈式

併發和並行均可以是不少個線程,就看這些線程能不能同時被(多個)CPU執行,能夠說明是並行,併發是多個線程被一個CPU輪流切換着執行高併發

高併發的相關指標

高併發相關指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),併發用戶數等性能

響應時間:系統對某個請求作出相應的時間.例如處理一個HTTP請求,從HTTP發出到收到響應須要200ms,則200ms就是系統的響應時間.

吞吐量:單位時間內處理的請求數量

QPS:每秒響應請求數,這個感受和吞吐量區分不大

併發用戶數:同時承載正常使用系統功能的用戶數量. 例如微信,同時能夠x億人在線,必定程度表明了系統的併發用戶數

提升併發能力

有如下途徑:

  • 增長機器:讀寫分離,分佈式部署(不一樣模塊),集羣(相同服務)
  • 加強單機性能:數據庫優化,優化代碼(如算法),硬件升級(CPU,內存,SSD等)

Golang的並行能力

Golang從語言層面對多核CPU支持很是好,在設計程序時運用了併發的設計理念,Go程序在運行期有多是並行的

Rob Pike大神關於二者的闡述:「併發關乎結構,並行關乎執行」

相關文章
相關標籤/搜索