1. 程式人生 > 實用技巧 >重新整理作業系統概念系類——程序通訊

重新整理作業系統概念系類——程序通訊

前言

介紹一下程序之間的通訊,以及我在工作中對於程序通訊的選擇。

為什麼有這個程序通訊的概念呢。

實際上是因為程序是一個獨立的執行單位,它分配的記憶體地址不能夠被其他程序訪問,這樣的設計其實是為了安全。

但是有時候我們程序之間需要交換資訊,那麼怎麼辦呢?作業系統給了我們路口。

程序通訊有下面幾種方式:

圖:

正文

共享儲存

看圖:

舉個栗子。

不知道各位有沒有開發過android,android app之間是如何通訊的呢?

app肯定是不同的程序,他們有一種Ashmem來實現共享記憶體,有興趣可以看看。

管道通訊

管道是指用於連線讀寫程序的一個共享檔案,又名pipe 檔案。其實就是在記憶體中開闢一個大小固定的緩衝區。

注:管道只能採用半雙工通訊,某一段時間內只能實現單項的傳輸。如果要實現雙通道,那麼要兩根。

它的運作方式是這樣的,比如說程序一寫完了資料後,程序二才能去讀取資料。

這種管道是1對1的概念,只能一個程序對另外一個程序,而不能1對多。

因為是這樣子的,只有管道寫滿之後,另外一個程序才能讀取,在另外一個程序讀取完畢之後,前面一個程序才能繼續寫。

所以說管道通訊其實是有非常嚴格的要求的。

訊息傳遞

程序間的資料交換以格式化的訊息為單位。程序通過作業系統提供的"傳送訊息/接收訊息"兩個原語來進行資料交換。

具體操作如下:

訊息傳遞有兩種方式,一種是直接通訊方式,一種是間接通訊方式。

直接通訊是這樣子的,一個程序通過傳送原語傳送訊息,這些訊息作業系統會把這些訊息掛載到目的程序訊息快取佇列中,如果目的程序需要接收,那麼目的程序可以通過接收原語接收。

所謂原語,一般是指由若干條指令組成的程式段,用來實現某個特定功能,在執行過程中不可被中斷。

間接通訊方式,訊息先發送到中間實體(信箱)中,因此也稱“信箱通訊方式”。

形象點如下: