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

執行緒和行程有什麼關係

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。