进程和线程的区别
进程:指的是 一个用户程序
在同一数据集合
上的一次执行过程
,它是资源分配的基本单位,可以理解为它就是运行中的一个程序.
线程:线程是进程上的一个实体,也是真正的执行体,它是系统调度的基本单位
.
进程和线程的由来:
进程和线程的区别:
- 正如上面所说:进程是
资源分配的最小单位
,线程是CPU调度的最小单位
. - 所有与进程相关的资源,都被记录在PCB(Process Control Block, 进程控制块) 中.
- 进程是抢占处理器的调度单位,每个进程都拥有一个完整的虚拟内存地址空间,当进程发生调度时,不同的进程拥有不同的虚拟内存地址空间,
线程属于某个进程
,同一进程内的不同线程共享该进程资源. - 线程只由
堆栈寄存器(存储线程内的局部变量,不能存储其他线程的变量)
,程序计数器
和TCB(Thread Control Block, 线程控制块)
组成.
总结:
- 线程不能看作独立应用去独立执行,而进程可以看作独立应用.
- 进程有独立的地址空间,相互不影响,线程只是进程的不同执行路径,也就是其执行体,当进程停止后,其中的所有线程都会停止.
- 线程没有独立的地址空间,
多进程的程序比多线程程序健壮
. - 进程的切换比线程切换开销大.
- 一个程序运行至少有一个进程,一个进程里面至少包含一个线程,线程是进程的组成部分.
Java中进程和线程之间的关系
- java对操作系统提供的功能进行了封装,包括线程和进程.
- 每运行
一个java程序都会产生一个java进程
,每个java进程至少包含一个线程. - 每个
java进程对应一个jvm实例(也就对应一个jvm堆这些)
,多个线程共享jvm里的堆但是每个线程都有自己私有的的栈. - java采用单线程编程模型,如果自己没有创建线程的话,程序会自动创建一个主线程,
当java程序启动时,主线程立即运行
. - 主线程可以创建子线程,原则上主线程要后于子线程完成执行,因为主线程还要执行一些关闭的动作.