最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

進程間通信工具

2023-03-06 21:28 作者:限量版范兒  | 我要投稿

看圖,這些通信工具也可以用在線程間通信,但是一般不用,

通信工具可以分為數(shù)據(jù)傳輸工具和共享內存,共享內存通過讓倆個進程中的頁表條目指向同一個RAM分頁來實現(xiàn),性能更好,數(shù)據(jù)傳輸工具需要將數(shù)據(jù)從用戶內存?zhèn)鞯絻群藘却?,內核內存再傳到用戶內存?/p>

數(shù)據(jù)傳輸
可以進一步將數(shù)據(jù)傳輸工具分成下列類別。
y 字節(jié)流:通過管道、FIFO 以及數(shù)據(jù)報 socket 交換的數(shù)據(jù)是一個無分隔符的字節(jié)流。
每個讀取操作可能會從 IPC 工具中讀取任意數(shù)量的字節(jié),不管寫者寫入的塊的大小是
什么。這個模型參考了傳統(tǒng)的 UNIX“文件是一個字節(jié)序列”模型。
y 消息:通過 System V 消息隊列、 POSIX 消息隊列以及數(shù)據(jù)報 socket 交換的數(shù)據(jù)是以
分隔符分隔的消息。每個讀取操作讀取由寫者寫入的一整條消息,無法只讀取部分
消息,而把剩余部分留在 IPC 工具中,也無法在一個讀取操作中讀取多條消息。
y
偽終端:偽終端是一種在特殊情況下使用的通信工具,在 64 章將會介紹有關偽終端
的詳細信息。
數(shù)據(jù)傳輸工具和共享內存之間的差別包括以下幾個方面。
y 盡管一個數(shù)據(jù)傳輸工具可能會有多個讀取者,但讀取操作是具有破壞性的。讀取操作
會消耗數(shù)據(jù),其他進程將無法獲取所消耗的數(shù)據(jù)。

y讀取者和寫者進程之間的同步是原子的。如果一個讀取者試圖從一個當前不包含數(shù)據(jù)

的數(shù)據(jù)傳輸工具中讀取數(shù)據(jù),那么在默認情況下讀取操作會被阻塞直至一些進程向該
工具寫入了數(shù)據(jù)。

?

共享內存
大多數(shù)現(xiàn)代 UNIX 系統(tǒng)提供了三種形式的共享內存: System V 共享內存、 POSIX 共享內存以
及內存映射。在后面介紹這些工具的章節(jié)中將會描述它們之間的差別(特別是在 54.5 節(jié)中)

下面是使用共享內存時的注意點。
y 盡管共享內存的通信速度更快,但速度上的優(yōu)勢是用來彌補需要對在共享內存上發(fā)生的
操作進行同步的不足的。如當一個進程正在更新共享內存中的一個數(shù)據(jù)結構時,另一個
進程就不應該試圖讀取這個數(shù)據(jù)結構。在共享內存中,信號量通常用來作為同步方法。
y
放入共享內存中的數(shù)據(jù)對所有共享這塊內存的進程可見。(這與上面數(shù)據(jù)傳輸工具中
介紹的破壞性讀取語義不同。)

?

同步工具
通過圖 43-1 中的同步工具可以協(xié)調進程的操作。通過同步可以防止進程執(zhí)行諸如同時更
新一塊共享內存或同時更新文件的同一個數(shù)據(jù)塊之類的操作。如果沒有同步,那么這種同時更新的操作可能會導致應用程序產(chǎn)生錯誤的結果。

UNIX 系統(tǒng)提供了下列同步工具。
y 信號量:一個信號量是一個由內核維護的整數(shù),其值永遠不會小于 0。一個進程可以
增加或減小一個信號量的值。如果一個進程試圖將信號量的值減小到小于 0,那么內
核會阻塞該操作直至信號量的值增長到允許執(zhí)行該操作的程度。(或者進程可以要求
執(zhí)行一個非阻塞操作,那么就不會發(fā)生阻塞,內核會讓該操作立即返回并返回一個標
示無法立即執(zhí)行該操作的錯誤。)信號量的含義是由應用程序來確定的。一個進程減
小一個信號量(如從 1 到 0)是為了預約對某些共享資源的獨占訪問,在完成了資源
的使用之后可以增加信號量來釋放共享資源以供其他進程使用。最常用的信號量是二
元信號量——一個值只能是 0 或 1 的信號量,但處理一類共享資源擁有多個實例的應
用程序需要使用最大值等于共享資源數(shù)量的信號量。 Linux 既提供了 System V 信號量,
又提供了 POSIX 信號量,它們的功能是類似的。
y
文件鎖:文件鎖是設計用來協(xié)調操作同一文件的多個進程的動作的一種同步方法。它
也可以用來協(xié)調對其他共享資源的訪問。文件鎖分為兩類:讀(共享)鎖和寫(互斥)
鎖。任意進程都可以持有同一文件(或一個文件的某段區(qū)域)的讀鎖,但當一個進程
持有了一個文件(或文件區(qū)域)的寫鎖之后,其他進程將無法獲取該文件(或文件區(qū)
域)上的讀鎖和寫鎖。 Linux 通過 flock()和 fcntl()系統(tǒng)調用來提供文件加鎖工具。 flock()
系統(tǒng)調用提供了一種簡單的加鎖機制,允許進程將一個共享或互斥鎖加到整個文件
上。由于功能有限,現(xiàn)在已經(jīng)很少使用 flock()這個加鎖工具了。fcntl()系統(tǒng)調用提供
了記錄加鎖,允許進程在同一文件的不同區(qū)域上加上多個讀鎖和寫鎖。
y 互斥體和條件變量:這些同步工具通常用于 POSIX 線程,第 30 章對此進行了介紹。

?

鏈接:https://www.dianjilingqu.com/684341.html


進程間通信工具的評論 (共 條)

分享到微博請遵守國家法律
麻栗坡县| 开鲁县| 西充县| 英德市| 东海县| 闵行区| 响水县| 建湖县| 大理市| 通山县| 台江县| 宕昌县| 靖安县| 县级市| 新沂市| 高平市| 高阳县| 邹平县| 宣化县| 镇平县| 虞城县| 丹寨县| 定结县| 慈利县| 桐乡市| 曲松县| 建瓯市| 如皋市| 女性| 来安县| 明光市| 潢川县| 汉寿县| 滦南县| 定日县| 辽中县| 曲阜市| 南华县| 惠东县| 哈密市| 广昌县|