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