什麼是併發?
併發的概念:兩個或多個任務在重疊的時間段內運行和完成。
併發的特點:只利用一個處理器,只是因爲處理器處理速度很快,所以看起來像同時運行,但這只是邏輯上的同時運行,在物理層面還是串行。
什麼是並行?
並行的概念:兩個或多個任務在同一時刻開始運行和完成。
並行的特點:利用多個處理器同時進行處理,是物理上的同時運行。比如說,在多核處理器上,有兩個線程同時執行同一段代碼,而單核處理器無法執行並行。所以,並行一定是併發。
爲什麼會出現併發和並行?
- 併發的出現:CPU處理速度很快,但是每個CPU同一時刻只能執行一個指令,所以操作系統開發出新的技術,讓不同的進程和線程用時間片的方式,即搶佔式的方式執行任務,這樣操作系統能更好的調用它們,讓用戶覺得程序在同時運行。
- 並行的出現:隨着CPU的發展,誕生了多核,操作系統可以自動的檢測CPU核心的數量,這一層都是操作系統來完成,用戶無法感知,也就是說怎麼把一個任務分配到哪個核心用戶是不知道的,如果所有的核心都已經被佔用,操作系統也可以實行搶佔式的方式把它認爲優先級更高的進程和線程優先執行。
什麼是高併發?
- 高併發的概念:同時有很多請求發給服務器,服務器並行處理,比如雙十一和微信搶紅包就是典型的高併發場景。
高併發和多線程的聯繫和不同?
- 高併發是指有大量的請求同時到達服務器所帶來的結果,需要服務器同時去處理這些請求,所以高併發是一種狀態。
- 多線程並不意味着高併發,它是一種解決方案,防止高併發帶來的性能和安全問題。
- 多線程可以提高硬件的利用率,比如Tomcat爲了處理多個請求,內部採用了多線程的模型。
- 多線程和高併發的關係:多線程是應對高併發這種狀態的一種重要的解決方案。
- 高併發不一定要多線程來解決,比如要解決很多用戶同時訪問數據庫,數據庫承受不了這些壓力,那可以在數據庫上面加一層Redis緩存層,這也是一種應對高併發的一種方法。
高併發有哪些指標?
- QPS(Queries Per Second)每秒查詢數,引申爲每秒請求數
- 帶寬
- PV(Page View)一天內的頁面瀏覽量
- UV(Unique Visitor)一天內訪問該頁面的用戶數量
- IP和UV的區別:IP變了,但是Cookie沒變,即用戶沒變;IP沒變,但是Cookie變了,即用戶變了。所以這是兩個不同的指標。
- 併發連接數,服務器接收請求的數目
- 服務器平均請求等待時間,服務器處理一個請求所花的時間