多執行緒 二 使用多執行緒的準備知識

2021-08-19 23:48:10 字數 1964 閱讀 9640

一、為什麼要使用多執行緒?

【使計算機所有資源在執行任務的時候能夠全部利用上,以提公升計算機資源利用率的方式來提公升系統執行效率】

cpu的單核執行速度由於硬體技術問題已經遇到瓶頸,而概念性的「光腦」貌似離我們還很遙遠,現在的計算機效能提公升方向是向多核發展。多核同時工作,協同完成任務。大家熟知的神威·太湖之光超級計算機總共使用了40960顆處理器,總計擁有10649600顆核心、1.31pb記憶體。即使是目前市場上的主流家用電腦也一般達到四核心八執行緒的配置標準。那麼對於這些多核的cpu,在開發軟體的時候就不得不考慮如何充分利用上每乙個核的效能,以至於使系統執行的效率更高。

二、cpu是執行的是執行緒任務還是程序任務?

【cpu執行的是執行緒中定義的任務】

程序是對記憶體資源的抽象,執行緒是對執行任務的抽象。cpu執行的是執行緒任務,和程序沒有任何關係。所以,cpu中的核在任意時間點只能執行某乙個執行緒的任務,具體執行哪個執行緒就要看作業系統的任務排程策略。在單核多執行緒任務中,作業系統會把cpu資源按照時間片劃分,根據執行緒的優先順序選擇執行緒進行執行任務。

三、程式中線程的數量控制在核數的1~2倍對嗎?

【不對!】

左圖為工作時win10 四核八執行緒 執行緒數: 2094。右圖為閒置centos7  單核 執行緒數 :127 。執行緒數量遠遠超過cpu核心數量的上百倍。

所以在開發程式過程中,如果不是執行緒開啟機制錯誤,就不會產生成上萬級別的執行緒導致執行緒切換浪費資源,而幾百個執行緒切換對cpu來說還不至於產生過多的資源消耗。

執行緒開啟機制錯誤例子:socket每接收乙個請求便建立乙個執行緒執行任務。這種情況下,很容易的便能開啟上千上萬個執行緒(在工作中遇到過)。

四、執行緒頻繁切換會耗費資源?

【消耗資源肯定會,但是消耗的資源一般情況下沒必要重視,當需要去重視的時候你就不會在看本文了】

執行緒消耗必定會耗費計算機資源,影響系統的執行效率。但是這種級別的資源浪費還沒必要引起關注去考慮優化,隨便優化乙個sql查詢就遠遠比優化執行緒切換效能提公升的多。

測試:計算任務:計算1億次 f(i)=(i * 10000.56) / 200 (i從1迴圈到10000)  每組資料測試4次。

電腦配置

//

scala2.12.12 jdk1.8

def showncputime(): unit =

}state.countdown()}})

threads(time) =thread

}var starttime =system.nanotime

for (time

state.await()

val endtime =system.nanotime

}

五、使用多執行緒的難點在**?

多執行緒的難點在於共享資料讀寫順序的問題,保證多個執行緒對同一資料的操作不會產生混亂。

程式中流動的都是資料,程式影響的也都是資料。在多個執行緒同時訪問共享資料的時候,由於執行緒讀取/寫入的時機不對而導致資料出錯,進而影響業務。

下面的問題涉及到作業系統底層知識,列出來只是為了引起讀者的思考,不再回答,以免誤人誤己。

六、對於多核cpu,執行緒任務是如何分配到每個核上面的?

七、單核cpu任務排程策略。在多個執行緒中,作業系統是如何選取其中某個執行緒分配給cpu執行的?選取規則是什麼?

八、執行緒切換耗費資源,那麼都耗費在什麼地方?掛起乙個執行緒的時候作業系統都進行了哪些操作?

九、作業系統開啟乙個新執行緒需要執行哪些步驟?計算機能夠開啟的最大執行緒數是多少?jvm能夠開啟的最大執行緒數是多少?他們和記憶體的大小有什麼關係?

多執行緒知識

同步 多個任務依次按順序執行 非同步 多個任務可以時執行 程序 乙個正在執行的應用程式就是乙個程序,為應用開闢記憶體空間 執行緒 乙個程序可以有多個執行緒,是程序的基本執行單元,執行應用的 任務 nsthread 建立執行緒 方法一 物件方法 nsthread thread nsthread all...

多執行緒系列(二) 多執行緒基礎

目錄 一 執行緒的幾種狀態 屬性 方法 執行緒的5個狀態 1 建立狀態 new 對應 thread th new thread worker 時 就建立了乙個新的執行緒,僅僅是新建狀態,程式還沒有執行執行緒中的 2 就緒狀態 runnable 對應 th.start 方法,新建執行緒在接收到star...

執行緒二 多執行緒基礎

任務量比較大,通過多執行緒可以提高效率時,需要非同步處理時,占用系統資源,造成阻塞的工作時,都可以採用多執行緒提高效率 執行緒建立 使用者執行緒和守護執行緒 j a分為兩種執行緒 使用者執行緒和守護執行緒 守護執行緒 在程式執行的時候在後台提供一種通用服務的執行緒,比如垃圾 執行緒就是乙個很稱職的守...