1. 程式人生 > >【轉】面向物件 -多執行緒 理論知識

【轉】面向物件 -多執行緒 理論知識

1. 基本概念

程序: 系統中正在執行的程式。 一條程序就代表當前系統中正在執行的一個程式。
每個程序都是相互獨立的,每個程序中都有屬於自己的記憶體空間。
執行緒:一個程序想要執行任務,必須通過執行緒來排程(執行),每個程序至少要有一個執行緒,如果沒有執行緒,那麼該程序(程式)就會退出執行。
執行緒是用來幫助程式執行操作任務,網路載入的路線。我們的裝置一般有雙核、四核、八核等,其實就是說處理器很強大
擁有多工處理能力。

2. 執行緒的排程方式:

  1. 執行緒的序列(同步):
    同一時間執行一個執行緒中的一個任務。如果有多個任務,那麼就一個接一個的按順序執行。
  2. 執行緒並行(非同步):
    多執行緒,開多條執行緒,每個執行緒執行一個任務。

3. 多執行緒的原理

實際上,一個CPU,同一時間只能處理一個執行緒中的任務,也就是說只有一個執行緒在執行。

多執行緒併發執行,其本質是CPU在多條執行緒之間快速(排程)切換。

注意點:
執行緒雖好,可別開的太多。
如果執行緒開的太多,會導致CPU在多個執行緒之間來回排程,耗費大量CPU資源。且單個執行緒被呼叫的頻率被減低。非但不會提升效率,可能會影響執行效率。

4. 多執行緒的優點:

能適當提升程式執行效率。
適當提升資源利用率(CPU、記憶體利用率),講資源轉換為效率。

5、 多執行緒的缺點:

建立一個執行緒是有開銷的,主執行緒在記憶體中的開銷大於子執行緒。建立執行緒大約耗時90毫秒。
如果大量開啟執行緒,會降低程式的效能。
執行緒越多,程式越複雜,例如執行緒1 給執行緒2傳遞資料。多個執行緒訪問資料,資料共享。

6. 主執行緒

一個程序開啟後,建立的第一條執行緒,稱之為主執行緒。
一般情況下,將耗時操作,放在子執行緒中(後臺執行緒)去執行。

7. 執行緒的多種狀態 (僅作了解)

新建(New) : 創建出來一條執行緒,還沒有分配任務的狀態。會被放到可排程執行緒池中,等待分配任務,排程。

就緒(Runable): 當我們分配任務,並呼叫開始執行方法後,開始進入就緒狀態。

執行(Runing): CPU排程,就會進入執行狀態。當CPU排程其他執行緒時,那麼該執行緒進入就緒狀態。

阻塞(Blocked): 當執行緒呼叫了sleep,或者加了同步鎖之後,執行緒會進入該狀態,且退出可排程執行緒池,CPU不會呼叫該執行緒,當解除鎖,或者到了sleep時間,那麼再次進入可排程執行緒池,供CPU呼叫。

死亡(Dead): 當執行緒的任務執行完畢、或異常退出之後,執行緒進入該狀態。

8、前臺執行緒和後臺執行緒:

後臺執行緒不會阻塞程序的退出。
前臺執行緒會阻塞程序的退出。
換句話來講就是,在程式執行結束後,如果還有前臺執行緒,那麼前臺執行緒會繼續執行完畢。如果前臺執行緒都執行完畢了,那麼無論後臺執行緒有沒有結束,都會被強制結束。



作者:雷潮
連結:https://www.jianshu.com/p/50af05c406ed
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。