01 執行緒基礎知識初始

2022-07-08 23:18:19 字數 1801 閱讀 6786

計算機cpu工作原理,作業系統排程單核cpu時其實是在不停的切換任務,因為cpu同一時間只能做一件事,而且cpu做事速度很快,往往在完成一件任務時需要等待其他零件完成任務(比如硬碟讀寫i/o阻塞),此時為了最大限度的理由資源,cpu只能在不同任務間來回切換,就是我們所說的併發了。

但併發帶來了一些問題,原先單任務現在變成了多個任務,任務之間的切換怎麼進行,這時候就引入了程序的概念。

用程序來對應乙個程式,每個程序對應一定的記憶體位址空間,並且只能使用它自己的記憶體空間,各個程序間互不干擾。並且程序儲存了程式每個時刻的執行狀態,這樣就為程序切換提供了可能。

當程序暫時時,它會儲存當前程序的狀態(比如程序標識、程序的使用的資源等),在下一次重新切換回來時,便根據之前儲存的狀態進行恢復,然後繼續執行。這就是併發,能夠讓作業系統從巨集觀上看起來同乙個時間段有多個任務在執行。

換句話說,程序讓作業系統的併發成為了可能。

而執行緒是程序的子集,執行緒也是乙個應用程式最小的執行單元。

程序的出現解決了作業系統的併發問題,但是對於乙個程序來說,它內部也需要執行多個子任務,比如讀取,計算,實時顯示,為了更大限度的提公升效率,人們引入了執行緒的概念。程序讓作業系統的併發性成為可能,而執行緒讓程序的內部併發成為可能。

注意,乙個程序雖然包括多個執行緒,但是這些執行緒是共同享有程序占有的資源和位址空間的。程序是作業系統進行資源分配的基本單位,而執行緒是作業系統進行排程的基本單位。

執行緒是程式執行的最小單位,而程序是作業系統分配資源的最小單位;

乙個程序由乙個或多個執行緒組成,執行緒是乙個程序中**的不同執行路線

程序之間相互獨立,但同一程序下的各個執行緒之間共享程式的記憶體空間(包括**段,資料集,堆等)及一些程序級的資源(如開啟檔案和訊號等),某程序內的執行緒在其他程序不可見;

排程和切換:執行緒上下文切換比程序上下文切換要快得多

問題:是否多執行緒的效能一定就由於單執行緒呢?

不一定,要看具體的任務以及計算機的配置。比如說:對於單核cpu,如果是cpu密集型任務,如解壓檔案,多執行緒的效能反而不如單執行緒效能,

因為解壓檔案需要一直占用cpu資源,如果採用多執行緒,執行緒切換導致的開銷反而會讓效能下降。但是對於比如互動型別的任務,肯定是需要使用多執行緒的、而對於多核cpu,對於解壓檔案來說,多執行緒肯定優於單執行緒,因為多個執行緒能夠更加充分利用每個核的資源。

雖然多執行緒能夠提公升程式效能,但是相對於單執行緒來說,它的程式設計要複雜地多,要考慮執行緒安全問題。

因此,在實際程式設計過程中,要根據實際情況具體選擇。

執行緒作為程式執行的最小單位,他有著乙個完整的生命週期:

如上圖,執行緒的生命週期大體分為如下5個部分:

new(新建) , runnable(可執行) , runing (執行), blocked(阻塞) , terminated(消亡)

下面對每個狀態進行具體講解

blocked 狀態

執行緒由於某些原因進入了阻塞狀態,詳見上文,執行緒在blocked狀態可進行的狀態切換:

terminated狀態

執行緒的最終狀態,該狀態的執行緒不會在進行狀態變換,意味著整個生命週期都結束了。執行緒進入到terminated狀態的情況:

1.執行緒執行正常結束,結束生命週期

2.執行緒執行出錯意外結束

3.jvm crash,導致所有執行緒都結束

了解執行緒的生命週期各狀態之間的轉換非常重要,每種語言具體定義的狀態列舉也許不同,單總體來說都會在這5種狀態的範疇之內。

執行緒池01 執行緒池基礎知識

執行緒池的執行邏輯如下 核心引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,threadfactory ...

01 基礎知識

程序概念 作業系統中所有執行中的任務通常是乙個程式,每個執行中的程式就是乙個程序 process 當乙個程式執行時,內部可能包含了多個順序執行流,每個順序執行流就是乙個執行緒。程序是處於執行過程中的程式,並且具有一定的獨立功能,程序是系統進行資源分配和排程的乙個獨立單位。程序三個特性 2.動態性 程...

01 基礎知識

1 計算機基礎 cpu 相當於人的大腦,用於計算。記憶體 儲存資料,4g,8g,16g,32g,成本高,斷電即消失。硬碟 1t,固態硬碟,機械硬碟,儲存資料,應該長久保持資料,重要檔案,小電影等等。2 編譯型語言和解釋型語言區別 編譯型 一次性將所有程式編譯成二進位制檔案。缺點 開發效率低,不能跨平...