關於CPU核心,線程,進程,並發,並行,及java線程之間的關系


前言:作為一個轉行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.並行

我覺得並行執行是相對順序執行而言,順序執行是指一個任務從上到下依次執行.

那么並行執行是指多個任務同時執行

 

以上就是我的一點個人淺見了,若有不足和錯誤之處,懇請各位大佬批評指正.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM