1. 程式人生 > >IPC機制總結

IPC機制總結

由於 onu rem 工具 ansi pc機 messenger har 服務

IPC機制:

1. 多進程概念;

2. 序列化機制和Binder;

3. 進程間通信:Bundle、文件共享、AIDL、Messenger、ContentProvider、Socket;

操作系統的設計,因此可以歸結為三點:

(1)以多進程形式,允許多個任務同時運行;

(2)以多線程形式,允許單個任務分成不同的部分運行;

(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。

進程和線程的區別:

進程和線程都是一個時間段的描述,是CPU工作時間段的描述。

進程是cpu資源分配的最小單位,線程是cpu調度的最小單位。是系統進行資源分配和調度的一個獨立單位,包換上下文切換的程序執行時間總和 = CPU加載上下文+CPU執行+CPU保存上下文。

線程是進程的一個實體,是CPU調度和分派的基本單位,是比進程更小的能獨立運行的基本單位。自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

一個變量保存在內存中,CPU訪問時將變量放入寄存器,讀寫完畢後再放回內存;

線程同步可使用關鍵字:Synchronized關鍵字修改函數或者一段代碼;

線程死鎖:

兩個線程需要同時訪問兩個共享資源時,常常會出現這種問題;
在Android系統中,可以使用 “kill -3 <pid>” 來檢查應用中死鎖的線程;
命令提示符是“#”,而不是“$”,說明當前是用root用戶權限操作shell

Android中的多進程:

一個應用內使用多進程:給四大組件在AndroidManifest中指定android:process屬性

運行在不同進程中的組件是屬於不同的虛擬機和Application的,即不同進程的組件會擁有獨立的虛擬機、Application以及內存空間;

IPC基礎概念:

1. Serializable接口

手動指定serialVersionUID的值,或讓Eclipse根據當前類的結構自動生成它的hash值

靜態成員變量不屬於對象,只屬於類,所以不參與序列化過程;

用transient關鍵字標記的成員變量不參與序列化過程;


2. Parcelable接口

完成對象的序列化,當需要通過Intent和Binder傳輸數據,或將對象持久化到存儲設備上,或通過網絡傳輸給其他客戶端,

都需要使用Parcelable或Serializable;

系統提供了許多實現了Parcelable接口的類,它們都是可以直接序列化,如Intent、Bundle、Bitmap等;

區別:

Serializable是Java的序列化接口,使用簡單,開銷大,序列化和反序列號需要大量I/O操作;

Parcelable是Android的序列化接口,使用麻煩,效率高,推薦該方法。

通常,將對象持久化到存儲設備上,或通過網絡傳輸給其他客戶端過程稍顯復雜,建議使用Serializable。


3. Binder

AIDL文件的本質:是系統為我們提供了一種快速實現Binder的工具


Android中的IPC方式:

1. Bundle

2. 文件共享:

由於Android系統基於Linux,使得其並發讀/寫文件可以沒有限制地進行,
適合在對數據同步要求不高的進程之間進行通信;

SharedPreferences: 是個特例,高並發時很大幾率丟失數據,不建議進程間通信使用;

3. Messenger:

一種輕量級的IPC方案,底層實現是AIDL,在進程間傳遞Message對象;
以串行的方式處理客戶端發來的消息,一次處理一個請求,因此在服務端不用考慮線程同步問題;
若大量並發請求,則Messenger不合適;

4. AIDL:
CopyOnWriteArrayList線程同步的List,支持並發讀/寫,非ArrayList
對象不能跨進程傳輸,使用RemoteCallbackList
觀察者模式
RemoteCallbackList 是系統專門提供的用於刪除跨進程的listener接口
權限認證的兩種方法

5. ContentProvider:
不同應用間數據共享,底層實現也是Binder
ContentResolver的query、update、insert、delete
對底層的數據存儲方式沒有任何要求,可以使用SQLite數據庫、普通文件、或內存中的一個對象來進行數據的存儲
Activity ---- ContentResolver ---- ContentProvider ----- SQLiteOpenHelper

6. Socket:
流式套接字----TCP協議(面向連接的協議,提供穩定的雙向通信功能,建立經過“三次握手”,超時重傳機制)
用戶數據報套接字----UDP協議(無連接的協議,提供不穩定的通信功能,性能上具有更好的效率,確定是不保證數據一定能夠正確傳輸)

IPC機制總結