進(jìn)程間通訊

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

1、文件共享

兩個(gè)進(jìn)程約定磁盤(pán)空間上的某個(gè)文件為信息交互的媒介,這種情況要注意不同進(jìn)程間訪問(wèn)共享文件的同步問(wèn)題

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

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

3、共享內(nèi)存

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

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


    共享內(nèi)存機(jī)制

4、管道(Pipe)

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

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

5、RPC(Remote Procedure Calls)

RPC涉及的通訊通常運(yùn)行與兩臺(tái)不同的機(jī)器中,一般完整的RPC通訊包含如下步驟:

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

Android進(jìn)程間通訊

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

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

參考資料

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

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

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