進程間通信

進程是一個獨立的資源管理單元,不同進程之間資源是獨立的,都有自己的PCB,不能在一個進程中直接訪問另一個進程的用戶空間和內核空間資源。但是,進程不是孤立的,不同的進程之間需要進行消息的交互和狀態的傳遞,因此需要進程間數據傳遞、同步及異步的機制。

顯然,這些機制不能由哪一個進程直接管理,只能由操作系統來完成這些機制的管理和維護。Linux提供了大量進程間通信機制來實現同一主機兩個進程間的通信。除此之外,Linux還提供了網絡主機間進程通信的機制

1、同主機進程間數據交互機制無名管道(PIPE)有名管道(FIFO)消息隊列(Message Queue)共享內存(Share Memory)

  • 無名管道只能實現具有親緣關係(父子進程)的進程間的通信,並且在通信進程雙方退出後自動消失;

  • 有名管道可用於任何同主機進程間通信,但管道是單向的,要注意多進程用同一管道通信會導致交叉讀寫的問題

  • 消息隊列可以實現同主機上任意的多進程間通信,但消息隊列可存放的數據量很有限,應用於少量的數據傳遞

  • 共享內存可實現同主機任意進程間大量數據通信,但共享空間數據訪問時存在競爭的問題

2、同主機進程間同步機制:信號量(semaphore)
3、同主機進程間異步機制:信號(Signal)
4、網絡主機間數據交互機制:套接字(Socket)

發佈了78 篇原創文章 · 獲贊 15 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章