中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程和進程有哪些關系

發布時間:2023-02-02 16:33:26 來源:億速云 閱讀:164 作者:iii 欄目:網絡安全

本篇內容主要講解“線程和進程有哪些關系”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“線程和進程有哪些關系”吧!

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

進程是資源分配的基本單位,線程是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 )

信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生

到此,相信大家對“線程和進程有哪些關系”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苍溪县| 方山县| 滦南县| 宝丰县| 沂源县| 洛宁县| 鲜城| 大新县| 吉水县| 岳普湖县| 宁远县| 沽源县| 南雄市| 顺平县| 蓬莱市| 临泽县| 洞口县| 雅安市| 奇台县| 泊头市| 土默特右旗| 兴山县| 元阳县| 玉龙| 肇源县| 哈尔滨市| 彭泽县| 潜山县| 湖北省| 安徽省| 万年县| 镶黄旗| 泗阳县| 石楼县| 淮安市| 巴青县| 象州县| 临朐县| 垫江县| 鸡东县| 陇川县|