首頁 常見問題 執行緒和行程有什麼關係

執行緒和行程有什麼關係

Jan 31, 2023 pm 02:18 PM
行程 執行緒

關係:1、一個行程可以有多個線程,但至少有一個執行緒;而一個執行緒只能在一個行程的位址空間內活動。 2.資源分配給行程,同一個行程的所有執行緒共享該行程所有資源。 3、CPU分配給線程,也就是真正在處理器運行的是線程。 4.執行緒在執行過程中需要協作同步,不同行程的執行緒間要利用訊息通訊的辦法實現同步。

執行緒和行程有什麼關係

本教學操作環境:windows7系統、Dell G3電腦。

行程是資源分配的基本單位,執行緒是CPU調度和分派的基本單位

#執行緒是行程的一部分,一個執行緒只能屬於一個行程,一個行程可以有多個執行緒,但至少有一個執行緒

每個行程都有獨立的程式碼和資料空間(程式上下文),程式間的切換開銷大,執行緒可看做輕量級的進程,同一類執行緒共享程式碼和資料空間,每個執行緒都有自己獨立的運行堆疊和程式計數器(PC),執行緒間切換開銷小

#在作業系統中能同時執行多個行程(程式),在同一個行程(程式)中多個執行緒同時執行(透過CPU調度,在每個時間片中只有一個執行緒執行)

#系統在運作的時候會為每個行程分配不同的記憶體空間,執行緒除了CPU外,系統不會為線程分配記憶體(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源

沒有現成的進程可以看做單線程的,如果一個行程內有多個線程,則執行過程不是一條線的,維斯多條線(線程)共同完成
線程是進程的一部分,故線程被稱為輕權進程/輕量級進程

行程與執行緒的關係

1、一個行程可以有多個執行緒,但至少有一個執行緒;而一個執行緒只能在一個行程的位址空間內活動。

2、資源分配給行程,同一個行程的所有執行緒共享該行程所有資源。

3、CPU分配給線程,也就是真正在處理器運行的是線程。

4、執行緒在執行過程中需要協作同步,不同行程的執行緒間要利用訊息通訊的辦法實現同步。

哪些可以共享進程之間?

線程共享的環境包括:進程代碼段、進程的公有數據(利用這些共享的數據,線程很容易的實現相互之間的通訊)、進程打開的文件描述符、訊號的處理器、進程的目前目錄和進程用戶ID與進程組ID。

進程擁有這許多共通性的同時,也擁有自己的個性。有了這些個性,線程才能實現並發性。這些個性包括:

   1.執行緒ID
      每個執行緒都有自己的執行緒ID,而這個ID在這個行程中是唯一的。進程用此來標識執行緒。

   2.暫存器群組的值
      由於執行緒間是並發運作的,每個執行緒有自己不同的運算線索,當從一個執行緒切換到另一個執行緒上時,必須將原有的線程的暫存器集合的狀態保存,以便將來該線程在被重新切換到時能得以恢復。

   3.執行緒的堆疊
      堆疊是確保執行緒獨立運作所必須的。
      執行緒函數可以呼叫函數,而被呼叫函數中又是可以層層巢狀的,所以執行緒必須擁有自己的函數堆疊,使得函數呼叫可以正常執行,不受其他執行緒的影響。

   4.錯誤回傳碼
      由於同一個進程中有很多個執行緒在同時運行,可能某個執行緒進行系統呼叫後設定了errno值,而在該執行緒還沒有處理這個錯誤,另外一個執行緒就在此時被調度器投入執行,這樣錯誤值就有可能被修改。

      所以,不同的執行緒應該擁有自己的錯誤回傳碼變數。

   5.執行緒的訊號屏蔽碼
      由於每個執行緒所感興趣的訊號不同,因此執行緒的訊號屏蔽碼應該由執行緒自己管理。但所有的執行緒都共享同樣的訊號處理器。

   6.執行緒的優先權
      由於執行緒需要像行程一樣能夠被調度,那麼就必須要有可供調度使用的參數,這個參數就是執行緒的優先權。

進程間通訊的五種方式

#1.(無名)管道

#半雙工,即不能同時在兩個方向上傳輸資料。有的系統可能支援全雙工。

只能在父子進程間。經典的形式就是管道由父流程創建,在進程fork子進程之後,就可以在父子進程之間使用了。

2.命名管道(FIFO)

不相關的進程也能夠進行資料交換。

3.訊息佇列

訊息佇列,就是一個訊息的鍊錶,是一系列保存在核心中訊息的清單。使用者進程可以向訊息佇列新增訊息,也可以向訊息佇列讀取訊息。

訊息佇列與管道通訊相比,其優勢是對每個訊息指定特定的訊息類型,接收的時候不需要按照佇列順序,而是可以根據自訂條件接收特定類型的訊息。

可以把訊息看做一個記錄,具有特定的格式以及特定的優先權。對訊息佇列有寫入權限的程序可以為訊息佇列中依照一定的規則新增訊息,對訊息佇列有讀取權限的進程可以從訊息佇列讀取訊息。

4.信號量

信號量是一個計數器,它主要用在多個進程需要對共享資料進行存取的時候。考慮這一的情況,不能同時有兩個進程對同一數據進行訪問,那麼借助信號量就可以完成這樣的事情。

它的主要流程如下:

檢查控制該資源的信號量

如果信號量值大於0,則資源可用,並且將其減1,表示當前已被使用

如果信號量值為0,則進程休眠直至信號量值大於0

#也就是說,它實際上是提供了一個不同進程或進程的不同執行緒之間訪問同步的手段。

5.共享記憶體

共享記憶體允許兩個或多個進程共享一個給定的儲存區,這一段儲存區可以被兩個或兩個以上的進程映射到自身的位址空間中,一個進程寫入共享記憶體的訊息,可以被其他使用這個共享記憶體的進程,透過一個簡單的記憶體讀取錯做讀出,從而實現了進程間的通訊。

採用共享內存進行通信的一個主要好處是效率高,因為進程可以直接讀寫內存,而不需要任何數據的拷貝,對於像管道和消息隊裡等通信方式,則需要再內核和使用者空間進行四次的資料拷貝,而共享記憶體則只拷貝兩次:一次從輸入檔案到共享記憶體區,另一次從共享記憶體到輸出檔案。

一般而言,進程之間在共享內存時,並不總是讀寫少量數據後就解除映射,有新的通信時在重新建立共享內存區域;而是保持共享區域,直到通信完畢為止,這樣,資料內容一直保存在共享記憶體中,並沒有寫回檔案。共享記憶體中的內容往往是在解除映射時才寫回文件,因此,採用共享記憶體的通訊方式效率非常高。

6.套接字Socket:

套解口也是一種進程間通訊機制,與其他通訊機制不同的是,它可用於不同電腦間的進程通訊。

7.訊號( sinal )

訊號是一種比較複雜的通訊方式,用來通知接收行程某個事件已經發生

#更多相關知識,請造訪常見問題欄位!

以上是執行緒和行程有什麼關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解釋一下explorer.exe進程是什麼 解釋一下explorer.exe進程是什麼 Feb 18, 2024 pm 12:11 PM

explorer.exe是什麼進程在我們使用Windows作業系統的時候,常常會聽到一個名詞"explorer.exe".那麼,你是否好奇這個進程到底是什麼?在本文中,我們將詳細解釋explorer.exe是什麼進程以及其功能和作用。首先,explorer.exe是Windows作業系統的關鍵流程,它負責管理和控制Windows資源管理器(Window

請問ccsvchst.exe是哪一種進程? 請問ccsvchst.exe是哪一種進程? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe是一種常見的進程文件,它是SymantecEndpointProtection(SEP)軟體的一部分,而SEP則是一款由著名的網路安全公司Symantec開發的終端保護解決方案。作為該軟體的一部分,ccsvchst.exe負責管理和監控SEP的相關進程。首先,我們來了解SymantecEndpointProtection(

如何正確殺死Linux中的殭屍行程 如何正確殺死Linux中的殭屍行程 Feb 19, 2024 am 10:40 AM

在Linux系統中,殭屍行程是已經終止但仍保留在系統中的特殊流程。雖然殭屍行程不會消耗太多資源,但如果數量太多,可能會導致系統資源耗盡。本文將介紹如何正確清除殭屍進程,以確保系統的正常運作。 1Linux殭屍行程子程序完成任務後,如果父行程沒有及時檢查狀態,子行程將成為殭屍行程。子進程在等待父進程確認,完成後系統才會回收。否則,殭屍行程會繼續懸掛在系統中。若要檢查系統中是否有殭屍進程,可透過執行命令top來查看所有正在執行的進程及可能存在的殭屍進程。 ‘top’指令的結果從上圖可以看到Linux中進

Linux進程優先權調整方法詳解 Linux進程優先權調整方法詳解 Mar 15, 2024 am 08:39 AM

Linux程序優先級調整方法詳解在Linux系統中,進程的優先順序決定了其在系統中的執行順序和資源分配。合理調整進程的優先順序可以提高系統的效能和效率。本文將詳細介紹Linux中如何調整進程的優先級,並提供具體的程式碼範例。一、進程優先權概述在Linux系統中,每個行程都有一個與之相關聯的優先權。優先權的範圍一般是-20到19,其中-20表示最高優先權,19表

如何在 Windows 11 中停止工作管理員進程更新並更方便地終止任務 如何在 Windows 11 中停止工作管理員進程更新並更方便地終止任務 Aug 20, 2023 am 11:05 AM

如何在Windows11和Windows10中暫停工作管理員進程更新按CTRL+視窗鍵+刪除開啟工作管理員。預設情況下,任務管理器將開啟「進程」視窗。正如您在此處看到的,所有應用程式都在無休止地移動,當您想要選擇它們時,可能很難將它們指向下方。因此,按CTRL並按住它,這將暫停任務管理器。您仍然可以選擇應用程序,甚至可以向下捲動,但您必須始終按住CTRL按鈕。

為什麼Linux中的行程會處於休眠狀態? 為什麼Linux中的行程會處於休眠狀態? Mar 20, 2024 pm 02:09 PM

為什麼Linux中的行程會處於休眠狀態?在Linux作業系統中,進程可能會處於休眠狀態,這是由於多種不同的原因和條件造成的。當進程處於休眠狀態時,表示該進程暫時被掛起,無法繼續執行,直到滿足某種條件後才能被喚醒繼續執行。接下來將詳細介紹在Linux中進程進入休眠狀態的幾種常見情況,並透過具體的程式碼範例加以說明。等待I/O完成:當進程發起一個I/O操作(例如讀取

C++並發程式設計:如何避免執行緒飢餓和優先反轉? C++並發程式設計:如何避免執行緒飢餓和優先反轉? May 06, 2024 pm 05:27 PM

為避免執行緒飢餓,可以使用公平鎖確保資源公平分配,或設定執行緒優先權。為解決優先權反轉,可使用優先權繼承,即暫時提高持有資源執行緒的優先權;或使用鎖的提升,即提升需要資源執行緒的優先權。

Linux系統無PHP進程的偵測方法 Linux系統無PHP進程的偵測方法 Mar 16, 2024 am 11:42 AM

《Linux系統無PHP進程的檢測方法,需要具體程式碼範例》在使用Linux系統進行Web開發時,經常會依賴PHP進程來處理動態頁面和邏輯,而有時候我們可能需要監測伺服器上是否有PHP進程。本文將介紹一種偵測Linux系統中是否存在PHP進程的方法,並給出具體的程式碼範例。為什麼需要偵測PHP進程在Web開發中,PHP進程扮演著至關重要的角色,它負責解析執行P