進程間通訊

經(jīng)典實現(xiàn)

1、文件共享

兩個進程約定磁盤空間上的某個文件為信息交互的媒介,這種情況要注意不同進程間訪問共享文件的同步問題

2、操作系統(tǒng)提供的公共信息機制

比如Windows系統(tǒng)提供的注冊表

3、共享內(nèi)存

共享內(nèi)存是一種常用的進程間通訊機制。兩個進程可以直接共享訪問同一塊內(nèi)存區(qū)域,減少了數(shù)據(jù)的復(fù)制操作,因而速度上優(yōu)勢比較明顯。操作步驟如下:

  • a、創(chuàng)建內(nèi)存共享區(qū)
  • b、映射內(nèi)存共享區(qū)
  • c、訪問內(nèi)存共享區(qū)
  • d、進程間通訊
  • e、撤銷內(nèi)存映射區(qū)
  • f、刪除共享區(qū)


    共享內(nèi)存機制

4、管道(Pipe)

管道也是操作系統(tǒng)中常見的一種進程間通訊方式,它適用于所有POSIX系統(tǒng)及Windows系列產(chǎn)品。Pipe通過方式如下:

  • 進程雙方分立管道的兩邊,進行數(shù)據(jù)的傳輸通訊
  • 管道是單向的
  • 一根管道同時具備“讀取”和“寫入”
  • 管道有容量限制

5、RPC(Remote Procedure Calls)

RPC涉及的通訊通常運行與兩臺不同的機器中,一般完整的RPC通訊包含如下步驟:

  • 客戶端進程調(diào)用stub接口:
  • Stub根據(jù)操作系統(tǒng)的要求進行打包,并執(zhí)行相應(yīng)的系統(tǒng)調(diào)用
  • 有內(nèi)核來完成與服務(wù)器端的具體交互,它負責(zé)將客戶端的數(shù)據(jù)包發(fā)給服務(wù)器端的內(nèi)核
  • 服務(wù)器端Stub解包并調(diào)用與數(shù)據(jù)包匹配的進程
  • 進程執(zhí)行操作
  • 服務(wù)器你以上步驟的逆向過程將結(jié)果返回給客戶端

Android進程間通訊

Android是基于Linux系統(tǒng)實現(xiàn),自然支持Linux系統(tǒng)的進程間通訊,如文件共享、共享內(nèi)存等方式,同時也封裝了自身的特色方式,如:

  • Bundle
    適用于四大組件間的進程通訊,只支持特定數(shù)據(jù)傳輸,如基本數(shù)據(jù)類型,可序列化的引用數(shù)據(jù)
  • 文件共享
    簡單易用,不適合高并發(fā)的場景
  • AIDL
    系統(tǒng)封裝的基于Binder的進程間通訊
  • Messenger
    低并發(fā)的一對多實時通信,無RPC需求,或者無需要返回結(jié)果的RPC需求
  • ContentProvider
    一對多的進程間數(shù)據(jù)共享
  • BroadcastReceiver
    操作簡單,對持一對多實時通信
  • Socket
    功能強大,可通過網(wǎng)絡(luò)傳輸字節(jié)流,支持一對多實時并發(fā)通信

參考資料

  • 深入理解Android內(nèi)核設(shè)計思想. 林學(xué)森。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容