1. 程式人生 > >Java程序間通訊與同步機制

Java程序間通訊與同步機制

程序間通訊問題

  1. 無名管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
  2. 高階管道(popen)將另一個程式當做一個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式。
  3. 命名管道(named pipe):有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊
  4. 訊息佇列(message queue):訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
  5. 訊號量(semophore)
    :訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段
  6. 訊號(signal):訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生
  7. 共享記憶體(shared memory)共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 IPC 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩兩配合使用,來實現程序間的同步和通訊。
  8. 套接字(socket)
    : 套介面也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同機器間的程序通訊

同步機制的基本準則

  • 空閒則讓:當無程序處於臨界區時,表明臨界資源處於空閒狀態,允許一個請求進入臨界區的程序立即進入臨界區,以有效利用臨界資源。
  • 忙則等待:當已有程序處於臨界區時,表明臨界資源正在被訪問,因而其他試圖進入臨界區的程序必須等待,以保證對臨界資源的互斥訪問。
  • 有限等待:對要求訪問臨界資源的程序,應保證在有限時間內能進入自己的臨界區,以免陷入“死等”狀態。
  • 讓權等待:當程序不能進入自己的臨界區時,應立即釋放處理機,以免程序陷入“忙等”狀態。

什麼是臨界區? 每個程序中訪問臨界資源的那段程式稱為臨界區(臨界資源是一次僅允許一個程序使用的共享資源)。每次只准許一個程序進入臨界區,進入後不允許其他程序進入。