為什麼會有進程間通信?
我們應該都知道了,進程是一個程序的一次執行,是系統資源分配的最 小單元。這裡所說的進程一般是指運行在用戶態的進程,而由於處於用戶態的不同進程間是彼此隔離的,但是 它們很可能需要相互發送一些信息,好讓對方知道自己的進度等情況,像這樣進程間傳遞信息就叫進程間通信 。
進程間通信方式有幾種?
就像處於不同城市的人之間的通信方式有手機、電腦等方式一樣, 進程間通信的方式有幾種,就用下面的圖來表示把,這樣直觀,並且我一直相信這時一個知識點,必須記下來 !
管道(Pipe)及有名管道(Named Pipe): 管道可用於具有"血緣"關系進程間(也就是父子進程或者兄弟進程)的通信。有名管道除具 有管道所具有的功能外,還允許無"血緣"關系進程間的通信。
信號(Signal): 信號是在軟 件層次上對中斷機制的一種模擬,它是比較復雜的通信方式,用於通知進程有某事件發生。應該學過ARM或單 片機中斷吧,其實一個進程收到一個信號與處理器收到一個中斷請求效果上可以說是一樣的(注意是效果噢! )。
信號量(Semaphore): 主要作為進程之間及同一進程的不同線程之間的同步和互斥手段。猛一看, 可能會和信號混淆,但是它們最起碼英語表示就不同吧,我當時也是分不清他兩個,不過沒關系,不懂同步和 互斥也沒事,以後會詳細的講,先知道有這回事就行了。
共享內存(Shared Memory): 可以說這是最有 效的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內 存中數據的更新。這種通信方式需要依靠某種同步機制,如互此鎖和信號量等。
消息隊列(Messge Queue): 消息隊列是消息的鏈表,包括 Posix 消息隊列和 System V 消息隊列。它克服了前兩種通信方式中 信息量有限的缺點,具有寫權限的進程可以按照一定的規則向消息隊列中添加消息;對消息隊列具有讀權限的 進程則可以從消息隊列中讀取消息。
套接字(Socket): 這個絕對是一種更為一般的進程間通信機制, 它可用於網絡中不同機器之間的進程間通信,應用那是相當的廣泛啊。
我不想多寫了,我感覺學Linux 進程間通信,先宏觀上認識它就行,先知道這兩個問題,再逐個擊破吧!