Linux 應用程式,程序間通訊彙總(IPC)

2021-10-02 03:31:46 字數 904 閱讀 4092

【程序間通訊方式】

1.通訊:管道/fifo,訊息佇列,共享記憶體,socket/uds

管道一般用於有有親屬關係的程序間進行通訊。

核心自動處理管道的同步問題。管道通訊資料為流模型,不能區分不同時間傳送的兩條訊息。可以定長傳送每條資料,或者定義訊息分隔符。

fifo相對於管道,多了路徑名,任意程序都可訪問到

訊息佇列,可用於任意程序。核心自動處理其同步問題。訊息佇列可以實現非同步通知。

管道和訊息佇列傳遞資料時,資料需要從使用者空間拷貝到核心空間,再從核心空間拷貝到使用者空間。

共享記憶體:使用記憶體對映的方式,讓多個程序共享一段記憶體空間,實現程序間通訊。資料直接在記憶體中操作變化,不需要拷貝到記憶體空間,是所有通訊方式中最快的一種。但是,共享記憶體空間被多個程序同時訪問,使其成為公共資源,對其訪問需要同步工具的配合,防止資料錯誤。

2.同步:訊號,訊號量/條件變數,互斥鎖,讀寫鎖,記錄上鎖

訊號:非同步通知,訊號處理函式中可以呼叫的函式受到系統的限制。訊號處理完成後需要重新註冊訊號處理函式。

訊號量:分為有名訊號量和基於記憶體的無名訊號量。有名訊號量即可用於多個程序又可以用於多個執行緒之間進行通訊。

互斥鎖:原生用於多個執行緒之間通訊,用於多個程序時,需要放在共享記憶體區。

訊號量不同於紀錄鎖的地方在於,訊號量可以由第三方解鎖,而互斥鎖只能由鎖的持有者解鎖。

讀寫鎖:當應用程式存在一寫多讀的情況時,可以考慮使用讀寫鎖提高效率。不僅僅用於檔案。

記錄鎖:用於檔案操作。可以鎖住整個檔案,也可以鎖住檔案內的一段。記錄是應用程式的概念,核心只提供任意長度鎖死的功能,具體解釋由應用程式負責。讀寫鎖在程序終止時自動釋放,其它型別鎖在程序終止時不能自動釋放。

posix ipc在system v ipc之後產生,優先學習posix ipc

redis 做為redfish 後台資料庫

程序間通訊彙總筆記

1.訊號 signal 2.管道 pipe fifo 3.訊號量 semophore 4.訊息佇列 message queue 5.共享記憶體 shared memory 6.套接字 socket 訊號作業系統給程序傳送訊號,本質上是給程序的pcb中寫入資料,修改相應的pcb欄位,程序在合適的時間去...

linux應用程式設計基礎 程序間通訊(IPC)

theme 程序間通訊 ipc author jeff.xue contact information contactmexkj 163.com 1.程序間通訊作用 2.通訊方式 3.管道通訊 1 管道 單向 先進先出 2 管道種類 3 無名管道 4 命名管道 fifo 不相干程序交換資訊 4.訊號...

Linux應用程式設計 09 程序間通訊 訊號通訊

訊號通訊 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式訊號可以直接進行使用者空間程序和核心程序之間的互動,核心程序也可以利用它來通知使用者空間程序發生了哪些系統事件 如果該程序當前並未處於執行態,則該訊號就由核心儲存起來,直到該程序恢復執行再傳遞給它 如果乙個訊號被程序設定為阻塞,則...