多線程、多進程

在這裏插入圖片描述
多線程概念:線程是進程中執行運算的最小單位,是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以併發執行。其實平時我們啓動程序,其實是啓動的進程,但是在往下細分的話,其實是進程的一個或者多個線程完成的功能。

主線程:當一個程序啓動時,就有一個進程被操作系統(OS)創建,與此同時一個線程也立刻運行,該線程通常叫做程序的主線程(Main Thread)。每個進程至少都有一個主線程,主線程通常最後關閉。

子線程:在程序中創建的其他線程,相對於主線程來說就是這個主線程的子線程。

並行:任務數小於或等於cpu的核數,是真正意義上一起執行

併發:任務數大於cpu核數,多個任務交替執行

線程執行的時候是無序的,由cpu調度決定的

線程執行過程中,主線程會等待所有子線程執行完成用戶程序再退出

好處 :(1)易於調度。

      (2)提高併發性。通過線程可方便有效地實現併發性。進程可創建多個線程來執行同一程序的不同部分。

      (3)開銷少。創建線程比創建進程要快,所需開銷很少。

      (4)利於充分發揮多處理器的功能。通過創建多線程進程,每個線程在一個處理器上運行,從而實現應用程序的併發性,
      	  使每個處理器都得到充分運行。

線程的生命週期
在這裏插入圖片描述
各個狀態的說明如下:

1.new新建。新創建的線程經過初始化後,進入Runnable狀態。

2.Runnable就緒。等待線程調度。調度後進入運行狀態。

3.Running運行。

4.Blocked阻塞,暫停運行,解除阻塞後進入Runnable狀態重新等待調度。

5.Dead消亡。線程方法執行完畢返回或者異常終止。

可能有3種情況從Running進入Blocked:

同步:線程中獲取同步鎖,但是資源已經被其他線程鎖定時,進入Locked狀態,直到該資源可獲取(獲取的順序由Lock隊列控制)

睡眠:線程運行sleep()或join()方法後,線程進入Sleeping狀態。區別在於sleep等待固定的時間,而join是等待子線程執行完。當然join也可以指定一個“超時時間”。從語義上來說,如果兩個線程a,b, 在a中調用b.join(),相當於合併(join)成一個線程。最常見的情況是在主線程中join所有的子線程。

等待:線程中執行wait()方法後,線程進入Waiting狀態,等待其他線程的通知(notify)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章