進程與進程之間的通信,進程間通信 和 線程間同步

 2023-11-30 阅读 38 评论 0

摘要:? ? 以前經常搞混,所以記錄下來。 進程間通信主要是指多個進程間的數據交互。 而線程間同步主要指維護多個線程之間數據準確、一致性。一、進程間通信主要有以下幾種方式: 進程與進程之間的通信?? ? 管道(pipe):管道是一種半雙工的通信方式,數據

?

?

以前經常搞混,所以記錄下來。
進程間通信主要是指多個進程間的數據交互。
而線程間同步主要指維護多個線程之間數據準確、一致性。


一、進程間通信主要有以下幾種方式:

進程與進程之間的通信??

?

管道(pipe):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。

?

一個進程只能對應一個線程。有名管道(named pipe):有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。

?

消息隊列(message queue):消息隊列是由消息的鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩沖區大小受限等缺點。

?

進程和線程的概念,信號量(semophore):信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。

?

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

?

進程和線程的比較、共享內存(shared memory):共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號量,配合使用,來實現進程間的同步和通信。

?

套接字(socket) : 套接口也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同機器的進程通信


二、linux下線程間同步主要有以下幾種方式:

?

進程和線程的相同點。?

?

互斥量(mutex):互斥量本質上說是一把鎖,在訪問共享資源前對互斥量進行加鎖,在訪問完成后釋放互斥量。對互斥量進行枷鎖以后,其他視圖再次對互斥量加鎖的線程都會被阻塞直到當前線程釋放該互斥鎖。如果釋放互斥量時有一個以上的線程阻塞,那么所有該鎖上的阻塞線程都會變成可運行狀態,第一個變成運行狀態的線程可以對互斥量加鎖,其他線程就會看到互斥量依然是鎖著,只能再次阻塞等待它重新變成可用,這樣,一次只有一個線程可以向前執行。
?

讀寫鎖(rwlock):讀寫鎖與互斥量類似,不過讀寫鎖擁有更高的并行性。互斥量要么是鎖住狀態,要么是不加鎖狀態,而且一次只有一個線程可以對其加鎖。讀寫鎖有3種狀態:讀模式下加鎖狀態,寫模式下加鎖狀態,不加鎖狀態。一次只有一個線程可以占有寫模式的讀寫鎖,但是多個線程可以同時占有讀模式的讀寫鎖。
當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有視圖對這個鎖加鎖的線程都會被阻塞。當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的線程都可以得到訪問權,但是任何希望以寫模式對此鎖進行加鎖的線程都會阻塞,直到所有的線程釋放它們的讀鎖為止。
?

線程是?條件變量(cond):條件變量是線程可用的另一種同步機制。互斥量用于上鎖,條件變量則用于等待,并且條件變量總是需要與互斥量一起使用,運行線程以無競爭的方式等待特定的條件發生。
條件變量本身是由互斥量保護的,線程在改變條件變量之前必須首先鎖住互斥量。其他線程在獲得互斥量之前不會察覺到這種變化,因為互斥量必須在鎖定之后才能計算條件。

?

信號量(semophore):它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目 .信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統中的PV操作相同。它指出了同時訪問共享資源的線程最大數目。它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目。

?

java多線程。自旋鎖(spinlock):自旋鎖與互斥量類似,但它不是通過休眠使進程阻塞,而是在獲取鎖之前一直處于忙等(自旋)阻塞狀態。自旋鎖可以用于以下情況:鎖被持有的時間短,而且線程并不希望在重新調度上花費太多的成本。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/188738.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息