什麼是程序間通訊?
程序間通訊是由作業系統提供的機制,允許程序之間相互通訊。這種通訊可能包括一個程序讓另一個程序知道某個事件已發生,或者將資料從一個程序傳輸到另一個程序。
下圖說明了程序間通訊:

程序間通訊中的同步
同步是程序間通訊的必要部分。它要麼由程序間控制機制提供,要麼由通訊程序處理。一些提供同步的方法如下:
- 訊號量
一個訊號量是一個變數,它控制多個程序對公共資源的訪問。兩種型別的訊號量是二進位制訊號量和計數訊號量。
- 互斥
互斥要求一次只有一個程序執行緒可以進入臨界區。這對於同步很有用,並且還可以防止競爭條件。
- 屏障
屏障不允許單個程序繼續執行,直到所有程序都到達它。許多並行語言和集體例程都使用屏障。
- 自旋鎖
這是一種鎖。試圖獲取此鎖的程序會在迴圈中等待,同時檢查鎖是否可用。這被稱為忙等待,因為即使程序處於活動狀態,它也沒有執行任何有用的操作。
程序間通訊的方法
實現程序間通訊的不同方法如下:
- 管道
管道是一個單向的資料通道。可以使用兩個管道在兩個程序之間建立雙向資料通道。這使用標準輸入和輸出方法。管道用於所有 POSIX 系統以及 Windows 作業系統。
- 套接字
套接字是網路中傳送或接收資料的端點。這對於在同一臺計算機上的程序之間傳送的資料或在同一網路上的不同計算機之間傳送的資料都是正確的。大多數作業系統都使用套接字進行程序間通訊。
- 檔案
檔案是可以儲存在磁碟上或根據需要由檔案伺服器獲取的資料記錄。多個程序可以根據需要訪問檔案。所有作業系統都使用檔案進行資料儲存。
- 訊號
訊號在有限的範圍內用於程序間通訊。它們是從一個程序傳送到另一個程序的系統訊息。通常,訊號不用於傳輸資料,而是用於程序之間的遠端命令。
- 共享記憶體
共享記憶體是可以被多個程序同時訪問的記憶體。這樣做是為了使程序能夠相互通訊。所有 POSIX 系統以及 Windows 作業系統都使用共享記憶體。
- 訊息佇列
多個程序可以讀取和寫入資料到訊息佇列,而無需相互連線。訊息儲存在佇列中,直到其接收者檢索它們。訊息佇列對於程序間通訊非常有用,並且大多數作業系統都使用它。
下圖展示了程序間通訊的訊息佇列和共享記憶體方法:

資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP