對比進程間四種通訊方式

進程間通訊的方式:

1.管道中還有命名管道和非命名管道之分,非命名管道只能用於父子進程通訊,命名管道可用於非父子進程,命名管道就是FIFO,管道是先進先出的通訊方式。FIFO是一種先進先出的隊列。它類似於一個管道,只允許數據的單向流動。每個FIFO都有一個名字,允許不相關的進程訪問同一個FIFO,因此也成爲命名管。
2.消息隊列:是用於兩個進程之間的通訊,首先在一個進程中創建一個消息隊列,然後再往消息隊列中寫數據,而另一個進程則從那個消息隊列中取數據。需要注意的是,消息隊列是用創建文件的方式建立的,如果一個進程向某個消息隊列中寫入了數據之後,另一個進程並沒有取出數據,即使向消息隊列中寫數據的進程已經結束,保存在消息隊列中的數據並沒有消失,也就是說下次再從這個消息隊列讀數據的時候,就是上次的數據!!!
3.信號量, 不能傳遞複雜消息,只能用來同步
4.共享內存,只要首先創建一個共享內存區,其它進程按照一定的步驟就能訪問到這個共享內存區中的數據,當然可讀可寫;


幾種方式的比較:

1.管道:速度慢,容量有限
2.消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題。
3.信號量:不能傳遞複雜消息,只能用來同步
4.共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了一塊內存的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章