爲何使用Binder而不是其餘IPC機制

本文搬運自:Advantages of using Binder for IPC in Androidjava

使用Binder而不是其餘(Semaphores , Message Queue, PIPES)做爲IPC通訊機制的理由:linux

  1. 全部基於文件系統IPC通訊機制( 尤爲pipes),因爲缺乏一個能夠被全部程序讀寫的地方,這個地方用來讓全部的進程能夠mkfifo/create 基於文件系統/socket形式的IPC端口。( 儘管可使用/dev/socket,但它只能被系統進程,好比rile, zygote)
  2. 沒有一種進程通訊機制有Android須要的定位service(service location)的能力。在UNIX有PRC portmapper,而Android也須要類似的功能。(Android中的ServiceManager能夠用來方便地註冊/查找service)
  3. 有大量須要序列化的場景--好比intent、或其餘message。Binder提供parcel抽象,它可使用Parcel.java對數據進行封裝。
  4. SysV 有一些嚴重的問題,好比說競態條件、缺乏權限控制。
  5. Message queues和管道不能傳遞description。UNIX Domain socket能夠,可是不被使用(理由同1)
  6. Binder真的很輕量,而且自帶權限機制。它也有一些很是漂亮的特色,好比喚醒recipient process,以及共享內存,這是其餘機制所沒有的。
  7. Binder從Palm開始就被使用了。之前的Palmer去了Android,而後同時將他們的代碼帶了進去。
相關文章
相關標籤/搜索