首頁 > 軟體

圖解分析Javaweb程序與執行緒

2022-03-02 16:00:11

一、認識程序

1,執行緒初識

一個可執行程式執行起來,就可以看作是一個程序

程序也是作業系統分配資源的最小單元

一個程序在核心中都會對應一個PCB物件

一個執行緒就是一個 "執行流". 每個執行緒之間都可以按照順訊執行自己的程式碼. 多個執行緒之間 "同時" 執行 著多份程式碼.

2,程序屬性

程序id:身份表示

一組記憶體指標:指向程序執行時依賴的指令和資料在記憶體的哪個位置

程序狀態:是正在執行,還是正在休眠

程序優先順序:這個程序是優先上CPU執行還是放在後面上

程序的上下文:儲存了上次程序在CPU上執行的進度,以便下次程序上CPU的時候能夠繼續執行

程序的記賬資訊:記錄了程序在CPU上一共執行了多長時間,通過這個時間來限制不要讓某個程序霸佔CPU太久,導致其他程序無法執行

從微觀上看,一個CPU同一個時刻只能執行一個執行緒命令

程序太多,CPU太少

通過“並行”的方式,讓CPU快速排程,微觀上仍然是序列,但排程上極快,宏觀上就感覺是多個程序齊頭並進

二、為什麼要有執行緒

首先, "並行程式設計" 成為 "剛需".

單核 CPU 的發展遇到了瓶頸. 要想提高算力, 就需要多核 CPU. 而並行程式設計能更充分利用多核 CPU 資源. 有些任務場景需要 "等待 IO", 為了讓等待 IO 的時間能夠去做一些其他的工作, 也需要用到並行程式設計.

其次, 雖然多程序也能實現 並行程式設計, 但是執行緒比程序更輕量.

建立執行緒比建立程序更快.

銷燬執行緒比銷燬程序更快.

排程執行緒比排程程序更快.

三、認識執行緒與程序的區別

如果把一個程序看作是一個工廠,執行緒就是工廠中的若干流水線

執行緒其實包含在程序中

一個程序可能有多個執行緒

每一個執行緒都有一段自己要執行的邏輯(命令),每一個執行緒都是一個獨立的“執行流”

同一個程序中的很多執行緒之間,是共用一些資源

四、Linux中的執行緒

1,核心態與使用者態

假如你去銀行存款,得在視窗和櫃員互動

存款的過程:

1、先和櫃員溝通,要存多少錢,存在那個賬戶上

2、把卡和錢交給櫃員

以上都是能感知的到動作,相當於程式碼在使用者態執行

3、櫃員拿到東西在電腦上操作

以上是使用者感知不到的,相當於程式碼在核心態執行

使用者態:許可權相對比較小,只能進行一些低風險的操作

核心態:比使用者態高很多

2,PCB描述執行緒

 核心只認識PCB

一個執行緒和一個PCB對應

一個程序可能有多個PCB

這三個PCB就對應了java.exe這個程序的三個執行緒,核心中也把這若干從屬同一個程序稱為“執行緒組”,類似於MySql中的多對一

五、多種型別

以一個比較形象的例子,吃蘋果,100蘋果分著吃

執行緒:分配資源,房間+桌子

程序:排程讓小朋友去吃蘋果

1,單程序單執行緒

2,多程序單執行緒

3,單程序多執行緒

4,多程序多執行緒

5,程序中執行緒分析

一個執行緒中最多有多少個執行緒

1,CPU的個數有關

2,和執行緒執行的任務的型別也有關

        CPU密集型:程式一直在執行計算任務

        IO密集型:主要進行輸入輸出的操作

多個執行緒去搶奪一個資源可能造成執行緒不安全

一個執行緒如果出現丟擲異常,並且沒有很好的處理這個異常,整個程序就會被終止,其他執行緒無法運作

到此這篇關於圖解分析Javaweb程序與執行緒的文章就介紹到這了,更多相關Javaweb 程序 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com