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