Devik 进程,linux 进程,线程的区别

来源:互联网 发布:知已图片 编辑:程序博客网 时间:2024/05/16 17:02

Dalvik 虚拟机运行在 Linux 操作系统之上。Linux 操作系统并没有纯粹的线程概念,只要两个进程共享一个地址空间,那么就可以认为它们是同一个进程的两个线程。Linux 系统提供了两个 fork 和clone 调用,其中,前者是用来创建进程的,而后者是用来创建线程的。
一般来说, 虚拟机的进程和线程都是和目标机器本地操作系统的进程和线程一一对应的,这样的好处是可以使本地操作系统来调度进程和线程。
每个 Android 应用程序进程都有一个 Dalvik 虚拟机实例。这样做得好处是 Android 应用程序进程之间不会互相影响,也就是说,一个 Android 应用程序进程的意外终止,不会影响到其他的应用程序进程的正常运行。
每个 Android 应用程序进程都是由一种称为 Zygote 的进程 fork 出来的。Zygote 进程是由init 进程启动起来的,也就是在系统启动的时候启动的。Zygnote 进程在启动的时候,会创建一个虚拟机实例,并且在这个虚拟机实例将所有的 Java 核心库都加载起来。每当 Zygote 进程需要创建一个 Android 应用程序进程的时候,它就通过复制自身来实现,也就是通过 fork 系统调用来实现。这些被 fork 出来的 Android 应用程序进程,一方面是复制了 Zygote 进程中的虚拟机实例,另外一方面是与 Zygote 进程共享了同一套 Java 核心库。这样不仅 Android 程序进程的创建很快,而且所有的应用程序都共享同一套 Java 核心库而节省了内存空间。

0 0