前言:作為一個轉行java的小白,一直搞不清楚java中的多線程.於是來梳理一下關於CPU核心,線程,進程,並發,並行,及java線程之間的關系,
1.CPU角度來看:
我們以Intel的Core i5-8250U為例來舉例,它是四核八線程的CPU ,
我認為是一個CPU集成了4個核心,一般來說一個核心對應一個線程,Intel通過超線程技術來實現一個核心對應2個線程,所以它是四核8線程.
線程數:是同一時刻設備能並行執行的程序個數,這里說的線程是CPU級別的,不是java里的線程.
2.操作系統角度:
在操作系統中,進程是最小的資源分配單位,在一個進程中可以有多個線程.如下
我們可以看到這個任務管理器的圖,我電腦是4核8線程的CPU,我的電腦四核八線程,是采用超線程技術將一個物理處理核心模擬成兩個邏輯處理核心.
我認為,一個邏輯處理器核心同一時間點只能執行一個進程,那理論上最多應該同時執行8個進程啊.
我的電腦同時開啟了213個進程,2900個線程,那它是怎么處理的呢?我找了下資料
原來操作系統是采用的是時間片輪轉的搶占式調度方式,每個進程有各自獨立的一塊內存,使得各個進程之間內存地址相互隔離,
由於CPU的執行效率非常高,時間片非常短,在各個任務之間快速地切換,給人的感覺就是多個任務在“同時進行”.
3.java程序的角度
然后java程序可以算是一個進程,java的線程在jvm里分配,jvm模擬了虛擬的電腦運行環境
4.並發
並發主要是針對服務器而言,是否並發的關鍵是看用戶操作是否對服務器產生了影響。
因此,並發用戶數量的正確理解為:在同一時刻與服務器進行了交互的在線用戶數量。
這些用戶的最大特征是和服務器產生了交互,這種交互既可以是單向的傳輸數據,也可以是雙向的傳送數據
並發用戶數量的統計的方法目前還沒有准確的公式,因為不同系統會有不同的並發特點。例如OA系統統計並發用戶數量的經驗公式為:使用系統用戶數量*(5%~20%)
5.並行
我覺得並行執行是相對順序執行而言,順序執行是指一個任務從上到下依次執行.
那么並行執行是指多個任務同時執行
以上就是我的一點個人淺見了,若有不足和錯誤之處,懇請各位大佬批評指正.