程序與執行緒

2022-09-09 13:27:24 字數 1895 閱讀 2864

在開始學習多執行緒之前,我們需要先了解程序與執行緒。

最直觀的表現,就是當我們開啟 mac 的「活動監視器」時,會發現有兩個欄,分別是「程序名稱」與「執行緒(數量)」。

其中,程序可以簡單地理解為程式的一次執行,比如我們開啟了「網易雲**」,就會有乙個「網易雲**」的程序。我們好像並沒有見過叫做「kernel_task」的軟體,這類程式其實是系統的後台程序,它隨作業系統的啟動而啟動,完成作業系統的基本服務功能。另外一類程式也被稱為使用者程序,它是由使用者來啟動,完成使用者所需要的具體的應用功能,比如瀏覽**,聽**,上面說的「網易雲**」就是乙個使用者程序。

乙個程序可以有乙個或多個執行緒,上圖執行緒一欄的數字就代表對應程序中的執行緒數量。各個執行緒共享程序的記憶體空間、系統資源。早期的作業系統其實只有程序,沒有執行緒。隨著 cpu 計算能力的顯著提公升,為了提高 cpu 的利用率,彌補程序獨傲度過於笨重的問題,程序內部演進出了併發排程的需求,於是發明了執行緒。

程序是作業系統資源分配的最小單位,執行緒是 cpu 排程的最小單位。

乙個程序,大致可以被分為三個部分:**段、資料段、程序控制塊。

**段:程序的程式指令在記憶體中的位置,包含需要執行的指令集合。

資料段:程序的運算元據在記憶體中的位置。

程序控制塊(pcb):包括描述資訊和控制資訊。

下面我們來說說,pcb 裡面一些重要的概念。

程序 id:程序的唯一標識,在作業系統中我們很常見到他們,即 pid。

程序名稱:跟人名一樣,程序也有各自的名稱。

程序狀態:分為新建態、終止態,執行態,就緒態,阻塞態。

程序優先順序:程序排程的重要依據。程序優先順序越好,則越有可能被優先排程。

通訊資訊:程序間通訊時的訊息佇列。

記憶體資訊:程序的記憶體占用情況以及記憶體管理所用的資料結構。

i/o 裝置資訊:所用的i/o裝置編號及相應的資料結構。

檔案控制代碼:所開啟檔案的資訊。

程序上下文:程序的環境,包括 cpu 暫存器、程式計數器(pc)以及各種棧。在程序讓出 cpu 時,程序的上下文環境就會儲存在 pcb 中,供下次恢復執行時使用。

與程序相似,乙個執行緒主要由三個部分組成:執行緒描述資訊、程式計數器(pc)、棧記憶體。

執行緒描述資訊:即執行緒的基本資訊。

那麼,執行緒都有哪些基本資訊?

執行緒 id:執行緒的唯一標識。

執行緒名稱:方便使用者識別,使用者可以指定執行緒名稱(不指定則系統自動分配)。

執行緒優先順序:執行緒排程的優先順序,優先順序越高,獲得 cpu 的執行機會就越大。

執行緒狀態:執行緒的執行狀態,分為新建、就緒、執行、阻塞、結束。

其他:比如,是否是守護執行緒。

眾所周知,j**a 程式是執行在 jvm 之上的,每當我們使用 j**a 命令啟動乙個 j**a 程式,就會啟動乙個 jvm 程序。jvm 會尋找程式的入口(main 方法),執行 main 方法便有了「主線程」。

除了主線程之外,j**a 程序還包含一些「守護執行緒」。比如 gc 執行緒,它的作用是垃圾**。

程序與執行緒

程序 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 安全特性 因此程序是不活潑的,它從...