從新整理操做系統概念系類——進程通訊

前言

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

爲何有這個進程通訊的概念呢。緩存

其實是由於進程是一個獨立的運行單位,它分配的內存地址不可以被其餘進程訪問,這樣的設計實際上是爲了安全。安全

可是有時候咱們進程之間須要交換信息,那麼怎麼辦呢?操做系統給了咱們路口。app

進程通訊有下面幾種方式:操作系統

圖:設計

正文

共享存儲

看圖:code

舉個栗子。blog

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

app確定是不一樣的進程,他們有一種Ashmem來實現共享內存,有興趣能夠看看。進程

管道通訊

管道是指用於鏈接讀寫進程的一個共享文件,又名pipe 文件。其實就是在內存中開闢一個大小固定的緩衝區。

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

它的運做方式是這樣的,好比說進程一寫完了數據後,進程二才能去讀取數據。

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

由於是這樣子的,只有管道寫滿以後,另一個進程才能讀取,在另一個進程讀取完畢以後,前面一個進程才能繼續寫。

因此說管道通訊實際上是有很是嚴格的要求的。

消息傳遞

進程間的數據交換以格式化的消息爲單位。進程經過操做系統提供的"發送消息/接收消息"兩個原語來進行數據交換。

具體操做以下:

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

直接通訊是這樣子的,一個進程經過發送原語發送消息,這些消息操做系統會把這些消息掛載到目的進程消息緩存隊列中,若是目的進程須要接收,那麼目的進程能夠經過接收原語接收。

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

間接通訊方式,消息先發送到中間實體(信箱)中,所以也稱「信箱通訊方式」。

形象點以下:

相關文章
相關標籤/搜索