首頁 >常見問題 >進程間通訊的方式有哪些

進程間通訊的方式有哪些

coldplay.xixi
coldplay.xixi原創
2021-02-04 11:56:4077732瀏覽

進程間通訊的方式有:1、管道通常指無名管道,是UNIX系統IPC最古老的形式;2、FIFO,是一種檔案類型;3、訊息佇列,是訊息的連結表,存放在核心中;4、信號量,是一個計數器;5、共享記憶體。

進程間通訊的方式有哪些

本文操作環境:Windows7系統,Dell G3電腦。

進程間通訊的方式有:

一、管道

管道,通常指無名管道,是UNIX 系統IPC最古老的形式。

特點:

  • 它是半雙工的(即資料只能在一個方向上流動),具有固定的讀端和寫入端。

  • 它只能用於具有親緣關係的進程之間的溝通(也是父子進程或兄弟進程之間)。

  • 它可以看成是一種特殊的文件,對於它的讀寫也可以使用普通的read、write 等函數。但是它不是普通的文件,並不屬於其他任何文件系統,並且只存在於記憶體中。

二、FIFO

FIFO,也稱為命名管道,它是一種檔案類型。

1、特點

  • FIFO可以在無關的進程之間交換數據,與無名管道不同。

  • FIFO有路徑名與之相關聯,它以特殊設備檔案形式存在於檔案系統中。

三、訊息佇列

訊息佇列,是訊息的連結表,存放在核心中。一個訊息佇列由一個識別碼(即佇列ID)來識別。

特點

  • 訊息佇列是面向記錄的,其中的訊息具有特定的格式以及特定的優先權。

  • 訊息佇列獨立於傳送與接收程序。進程終止時,訊息佇列及其內容並不會被刪除。

  • 訊息佇列可以實現訊息的隨機查詢,訊息不一定要以先進先出的次序讀取,也可以按訊息的類型讀取。

四、信號量

訊號量(semaphore)與已經介紹過的 IPC 結構不同,它是一個計數器。信號量用於實現進程間的互斥與同步,而不是用於儲存進程間通訊資料。

特點

  • 信號量用於進程間同步,若要在進程間傳遞資料需要結合共享記憶體。

  • 信號量是基於作業系統的 PV 操作,程式對信號量的操作都是原子操作。

  • 每次對訊號量的 PV 操作不限於對訊號量值加 1 或減 1,而且可以加減任意正整數。

  • 支援信號量組。

五、共享記憶體

共享記憶體(Shared Memory),指兩個或多個程序共享一個給定的儲存區。

特點

  • 共享記憶體是最快的一種 IPC,因為進程是直接對記憶體進行存取。

  • 因為多個行程可以同時操作,所以需要進行同步。

  • 信號量 共享記憶體通常結合在一起使用,訊號量用來同步對共享記憶體的存取。

想了解更多程式設計學習,請關注php培訓##欄位!

以上是進程間通訊的方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn