android 进程和线程的区别,以及系统的进程的基本知识
来源:互联网 发布:淘宝买家怎么贷款啊 编辑:程序博客网 时间:2024/05/24 00:26
进程
是系统进行资源分配的独立单元
设计思想:为了允许多个程序同时在内存中运行
特点
- 进程是程序的一次执行过程。若程序执行两次甚至多次,则需要两个甚至多个进程。
- 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。(虚拟技术的支持,将一个CPU变幻为多个虚拟的CPU)
- 系统资源(如内存、文件)以进程为单位分配。
- 操作系统为每个进程分配了独立的地址空间
- 操作系统通过“调度”把控制权交给进程。
线程
cpu调度的基本单元
设计思想:
- 在一个进程内也需要并行执行多个程序,实现不同的功能。
- 进程切换的代价、开销比较大;
- 在进程内创建、终止线程比创建、终止进程要快。同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。线程之间相互通信无须通过内核(同一进程内的线程共享内存和文件)
进程与线程区别
- 定义方面:进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径。(进程可以创建多个线程)
- 角色方面:在支持线程机制的系统中,进程是系统资源分配的单位,线程是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
线程与进程的区别
包建强的无线技术空间
阅读全文
0 0
- android 进程和线程的区别,以及系统的进程的基本知识
- 进程和线程以及两者的区别
- 进程和线程的区别以及联系
- 进程和线程的关系以及区别
- 线程和进程的区别以及联系
- Android中线程与进程的基本知识
- Android进程和线程的区别
- Android中进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- Java反射机制理解
- Java基础之集合框架--Collections.reverseOrder()
- C++复习第二天 友元
- nyoj 108 士兵杀敌(一)
- VS编译器为你报的那些错
- android 进程和线程的区别,以及系统的进程的基本知识
- 集合创建、添加、遍历
- 深度学习基础-决策树应用(python实现)
- MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- 【智能合约】Solidity
- 单链表(内部循环的问题)
- Spring学习笔记(二)-----IOC之XML
- 数据结构——串的定义与基本操作
- Python的一些基础知识(一)