不同的 process 之間傳遞資料方法

   通常要視需求和系統平台而異,以下提供幾種方法:

1. 管道(Pipes)

  • 命名管道(Named Pipes):適合在不同的應用程式之間傳遞資料,特別是在 Windows 上使用廣泛。它會在作業系統中建立一個具名稱的資料流,可供多個 process 同時讀寫。
  • 匿名管道(Anonymous Pipes):常用於父子進程之間的通訊,一般在 UNIX/Linux 系統上較常見。

2. 訊息佇列(Message Queue)

  • 訊息佇列是一種以訊息為單位傳遞資料的通道。每個 process 可以向佇列發送或接收訊息。
  • 訊息佇列可以有效避免資料競爭問題,但需要考慮訊息排序及同步問題。

3. 共享記憶體(Shared Memory)

  • 共享記憶體是一種將記憶體段分配給多個 process 進行直接存取的方式,速度很快,但需要注意同步機制,以避免資料競爭(例如使用信號量 semaphore 或互斥鎖 mutex)。
  • 適合需要頻繁且高效的資料交換的情境,例如在 UNIX/Linux 中的 mmap 函數。

4. 套接字(Sockets)

  • 本地端套接字(Local Socket):適合同一台主機上的 process 通訊,可使用 Unix Domain Socket 或 Windows 的 AF_INET
  • 網路套接字(Network Socket):適用於不同主機間的 process 通訊。使用 TCP/UDP 協議來傳輸資料,適合分散式系統。

5. 遠端程序呼叫(RPC)

  • RPC 允許 process 呼叫遠端的函式並取得結果,像是呼叫本地函式一樣。這種方式通常應用在分布式系統中。
  • 常見的框架有 gRPC、XML-RPC、JSON-RPC 等。

6. 檔案系統

  • 將資料寫入檔案系統中,例如 CSV、JSON 等格式,再讓其他 process 讀取。雖然效率較低,但較為簡單,適合小型資料量的交換。

7. 訊號(Signals,僅 UNIX/Linux 支援)

  • UNIX/Linux 的訊號可以用於通知其他 process 發生了特定事件。訊號本身無法攜帶大量資料,但可以作為某種觸發機制,用於同步其他 IPC 方法。
參考資料:
https://ooorito.com/ipc-introduct/


留言

熱門文章