作者:雷哥来源|Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)从用户的角度来看,进程是一个运行的程序实例,线程是进程中真正执行的基本单元的一项任务。也就是说,一个正在运行的程序至少包含一个进程,一个进程至少包含一个线程,线程不能独立于进程而存在。进程进程(Process)是操作系统分配资源的基本单位。一个进程拥有的资源包括它自己的堆、栈、虚拟内存空间(页表)、文件描述符等信息。从编程的角度来理解一个进程,可以把它看成是PCB(ProcessControlBlock)进程控制块的类或结构。该结构体大致包括以下内容:1.进程号PID:进程ID标识。2、进程的状态:新状态就绪状态运行状态阻塞状态销毁状态3、执行优先级4、上下文:保存本次执行状态,以便下次继续执行。这个过程是一个上下文。5、内存地址线程线程(Thread)是操作系统可以进行操作调度的基本单位。它包含在进程中,是进程中的实际运行单元。在UnixSystemV和SunOS中,线程也被称为轻量级进程(lightweightprocesses),但轻量级进程是指内核线程(kernelthreads),用户线程(userthreads)被称为线程。PS:用户线程可以理解为应用程序自己的线程,由程序员创建和控制的线程;内核线程是内核支持和使用的线程。线程优势线程是一个轻量级进程。一个进程包含多个线程,因此多个线程可以共享进程资源。线程和进程的关系如下图所示:其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。程序计数器是一块内存区域,用于记录线程当前正在执行的指令的地址。栈用来记录每个线程自己的局部变量。当前程序创建的所有对象都存储在堆中。方法区存放常量、静态变量等信息。进程和线程的区别进程和线程的区别主要体现在以下几点。区别一:不同的从属关系不同的从属关系:一个进程是一个正在运行的程序的实例,一个进程包含一个线程,一个线程不能包含一个进程。区别二:描述的侧重点不同。描述的侧重点不同:进程是操作系统分配资源的基本单位,线程是操作系统调度的基本单位。区别3:共享资源不同共享资源不同:多个进程不能共享资源,每个进程都有自己的堆、栈、虚拟内存空间(页表)、文件描述符等信息,线程可以共享进程资源文件(堆和方法区)。区别四:上下文切换速度不同。上下文切换速度不同:线程上下文切换速度快(上下文切换是指从一个线程切换到另一个线程),而进程的上下文切换速度相对较慢。区别五:不同的操作者不同的操作者:一般情况下,进程的操作者是操作系统,而线程的操作者是程序员。小结进程是操作系统分配资源的基本单位,线程是操作系统调度的基本单位。一个进程至少包含一个线程,线程不能独立于进程而存在。进程不能共享资源,而线程可以。线程可以看作是轻量级进程,它们的主要区别体现在:从属关系、描述重点、共享资源、上下文切换速度、操作对象。
