執行緒與程序 的 Relation

2022-08-23 12:39:10 字數 3109 閱讀 2950

一:什麼是程序

程序是資源(cpu、記憶體等)分配的基本單位,它是程式執行時的乙個例項。

程式執行時系統就會建立乙個程序,並為它分配資源,然後把該程序放入程序就緒佇列,

程序排程器選中它的時候就會為它分配cpu時間,程式開始真正執行。

二:什麼是執行緒

執行緒是程式執行時的最小單位,它是程序的乙個執行流,是cpu排程和分派的基本單位。

乙個程序可以由很多個執行緒組成,執行緒間共享程序的所有資源,每個執行緒有自己的堆疊和區域性變數。

執行緒由cpu獨立排程執行,在多cpu環境下就允許多個執行緒同時執行。同樣多執行緒也可以實現併發操作,每個請求分配乙個執行緒來處理。

三:執行緒和程序各自有什麼區別和優劣呢?

1):程序是資源分配的最小單位,執行緒是程式執行的最小單位。

執行緒是共享程序中的資料的,使用相同的位址空間,因此cpu切換乙個執行緒的花費遠比程序要小很多,同時建立乙個執行緒的開銷也比程序要小很多。

3):執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料。

程序之間的通訊需要以通訊的方式(ipc)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。

4):但是多程序程式更健壯,多執行緒程式只要有乙個執行緒死掉,整個程序也死掉了,

而乙個程序死掉並不會對另外乙個程序造成影響,因為程序有自己獨立的位址空間。

四:多執行緒五個狀態

新建----->就緒----->執行------>阻塞------->死亡

五:怎麼實現多執行緒

1):繼承thread類建立執行緒。

thread類本質上是實現了runnable介面的乙個例項,代表乙個執行緒的例項。啟動執行緒的唯一方法就是通過thread類的start()例項方法。

2):實現runnable介面建立執行緒。

3):如果自己的類已經extends另乙個類,就無法直接extends thread,此時,可以實現乙個runnable介面。

4):實現callable介面通過futuretask包裝器來建立thread執行緒

六:多程序和多執行緒的區別,如下圖

七:什麼時候用多程序,什麼時候用多執行緒

1):需要頻繁建立銷毀的優先用執行緒。

2):需要進行大量計算的優先使用執行緒。

什麼是強相關、弱相關呢?

舉例:一般的server需要完成如下任務:訊息收發、訊息處理。

「訊息收發」和「訊息處理」就是弱相關的任務,而「訊息處理」裡面可能又分為「訊息解碼」、

「業務處理」,這兩個任務相對來說相關性就要強多了。

因此「訊息收發」和「訊息處理」可以分程序設計,「訊息解碼」、「業務處理」可以分執行緒設計。

當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。

4):可能要擴充套件到多機分布的用程序,多核分布的用執行緒。

一:什麼是程序

程序是資源(cpu、記憶體等)分配的基本單位,它是程式執行時的乙個例項。

程式執行時系統就會建立乙個程序,並為它分配資源,然後把該程序放入程序就緒佇列,

程序排程器選中它的時候就會為它分配cpu時間,程式開始真正執行。

二:什麼是執行緒

執行緒是程式執行時的最小單位,它是程序的乙個執行流,是cpu排程和分派的基本單位。

乙個程序可以由很多個執行緒組成,執行緒間共享程序的所有資源,每個執行緒有自己的堆疊和區域性變數。

執行緒由cpu獨立排程執行,在多cpu環境下就允許多個執行緒同時執行。同樣多執行緒也可以實現併發操作,每個請求分配乙個執行緒來處理。

三:執行緒和程序各自有什麼區別和優劣呢?

1):程序是資源分配的最小單位,執行緒是程式執行的最小單位。

執行緒是共享程序中的資料的,使用相同的位址空間,因此cpu切換乙個執行緒的花費遠比程序要小很多,同時建立乙個執行緒的開銷也比程序要小很多。

3):執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料。

程序之間的通訊需要以通訊的方式(ipc)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。

4):但是多程序程式更健壯,多執行緒程式只要有乙個執行緒死掉,整個程序也死掉了,

而乙個程序死掉並不會對另外乙個程序造成影響,因為程序有自己獨立的位址空間。

四:多執行緒五個狀態

新建----->就緒----->執行------>阻塞------->死亡

五:怎麼實現多執行緒

1):繼承thread類建立執行緒。

thread類本質上是實現了runnable介面的乙個例項,代表乙個執行緒的例項。啟動執行緒的唯一方法就是通過thread類的start()例項方法。

2):實現runnable介面建立執行緒。

3):如果自己的類已經extends另乙個類,就無法直接extends thread,此時,可以實現乙個runnable介面。

4):實現callable介面通過futuretask包裝器來建立thread執行緒

六:多程序和多執行緒的區別,如下圖

七:什麼時候用多程序,什麼時候用多執行緒

1):需要頻繁建立銷毀的優先用執行緒。

2):需要進行大量計算的優先使用執行緒。

什麼是強相關、弱相關呢?

舉例:一般的server需要完成如下任務:訊息收發、訊息處理。

「訊息收發」和「訊息處理」就是弱相關的任務,而「訊息處理」裡面可能又分為「訊息解碼」、

「業務處理」,這兩個任務相對來說相關性就要強多了。

因此「訊息收發」和「訊息處理」可以分程序設計,「訊息解碼」、「業務處理」可以分執行緒設計。

當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。

4):可能要擴充套件到多機分布的用程序,多核分布的用執行緒。

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...

程序與執行緒

程序包括 1 私有的虛位址空間 2 可執行程式 與資料 3 開啟系統資源列表控制代碼 4 安全訪問標誌 5 程序id 6 至少有乙個執行執行緒 執行緒包括 1 一組cpu暫存器狀態 2 兩個堆疊 系統態與使用者態 3 tls 執行緒區域性儲存區 4 執行緒id 5 安全特性 因此程序是不活潑的,它從...