1. 程式人生 > >程序間通訊的方式中哪種的訪問速度最快

程序間通訊的方式中哪種的訪問速度最快

程序間通訊的方式:

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

幾種方式的比較:

  • 管道:速度慢,容量有限
  • 訊息佇列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完資料的問題。
  • 訊號量:不能傳遞複雜訊息,只能用來同步
  • 共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如一個程序在寫的時候,另一個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了一塊記憶體的。