進程
是系統進行資源分配的獨立單元
1
設計思想:為了允許多個程序同時在內存中運行
特點
進程是程序的一次執行過程。若程序執行兩次甚至多次,則需要兩個甚至多個進程。
進程是是正在運行程序的抽象。它代表運行的CPU,也稱進程是對CPU的抽象。(虛擬技術的支持,將一個CPU變幻為多個虛擬的CPU)
系統資源(如內存、文件)以進程為單位分配。
操作系統為每個進程分配了獨立的地址空間
操作系統通過“調度”把控制權交給進程。
線程
cpu調度的基本單元
1
設計思想:
在一個進程內也需要並行執行多個程序,實現不同的功能。
進程切換的代價、開銷比較大;
在進程內創建、終止線程比創建、終止進程要快。同一進程內的線程間切換比進程間的切換要快,尤其是用戶級線程間的切換。線程之間相互通信無須通過內核(同一進程內的線程共享內存和文件)
進程與線程區別
定義方面:進程是程序在某個數據集合上的一次運行活動;線程是進程中的一個執行路徑。(進程可以創建多個線程)
角色方面:在支持線程機制的系統中,進程是系統資源分配的單位,線程是CPU調度的單位。
資源共享方面:進程之間不能共享資源,而線程共享所在進程的地址空間和其它資源。同時線程還有自己的棧和棧指針,程序計數器等寄存器。
獨立性方面:進程有自己獨立的地址空間,而線程沒有,線程必須依賴於進程而存在。
開銷方面。進程切換的開銷較大。線程相對較小。(前面也提到過,引入線程也出於了開銷的考慮。)
ps:
處於安全性的考慮,android規定,進程間不能直接通信。
為了解決進程見通信的問題,android采用binder機制實現IPC
binder機制如圖:
client通過binder驅動,在sm中找到server的注冊,通過與注冊類(可能就是代理類)的通信,實現和server的通信。
舉例:
android四大組件的底層通信機制都是基於Binder的。
client端和server是根據消息的發送和接收方不同,隨時在改變。
一下是我的猜測,可能不准確。
以activity跳轉為例:
首先activity1要告訴ams我要進行跳轉了,跳轉的目的地是activity2。
client:activity1;
sm:ServerManager
server:ActivityManagerService
代理類:ActivityManagerProxy
ams接到消息后,會告訴activity1我知道了
client:ActivityManagerService
sm:ServerManager
server:activity1
代理類:ApplicationThreadProxy
android系統在啟動的時候,本地的系統服務(SystemServer)都會注冊到ServerManager上。
我們常見的ActivityManagerServer、PackageManagerServer都屬於SystemServer
---------------------
作者:tjoven
來源:CSDN
原文:https://blog.csdn.net/u012221046/article/details/78010365
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!