⭐ 作者:小胡_不糊涂
作者主页:小胡_不糊涂的个人主页
收录专栏:JavaEE
持续更文,关注博主少走弯路,谢谢大家支持
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
简单地说,进程就是操作系统提供的一种 “软件资源” 。我们计算机正在运行中的程序就可以成为“任务”,也叫做“线程”。
现在大多数用到的系统都属于“多任务操作系统”,也就是同一时刻,可以同时运行多个任务。
上图中的每个进程在运行时,都需要给它分配一定的系统资源。
也就可以说,进程是系统分配资源的基本单位。
当然也有 “单任务操作系统”,比如:很久之前手机就是同一时刻只能运行一个任务。
但是进程在进行频繁创建和销毁的时候,开销是很大的 ,因为要不断地申请资源(CPU,硬盘,内存…)和释放。
而申请内存的时候,又是很麻烦的,先要指定一个大小,然后系统内部把各种大小的空闲内存,通过一定的数据结构给组织起来。当实际申请的时候,就需要去这样的空间中进行查找,找到个大小合适的空闲内存分配过来。
而线程的存在就是为了解决该问题!
PCB–进程控制块抽象(PCB Process Control Block)
计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在 Java 语⾔中,我们可以通过类/对象来描述这⼀特征。
PCB也就表示了进程信息的结构体。
PCB的重要属性:
“保存上下文” 就是把CPU的关键寄存器中的数据保存到内存中(PCB的上下文属性中)
“恢复上下文” 就是把内存中的关键寄存器中的数据加裁到CPU的对应寄存器中
⼀个线程就是⼀个“执⾏流”。每个线程之间都可以按照顺序执⾏⾃⼰的代码。多个线程之间“同时”执⾏着多份代码。
线程在进程的基础上做了改进,保持独立调度执行,省去了“分配/释放资源”带来的额外开销。
在这里,我们也使用PCB来描述一个线程,在PCB中有一个属性–内存指针。
对多个现成的PCB的内存指针,指向的是同一个内存空间。
但并不是随便几个线程就可以共享资源,我们把能够共享资源的这些线程,放在线程组中。
进程与线程是包含关系。每个进程都可以包含一个\多个线程。
在有线程之前,进程是资源分配的基本单位,也是调度执行的基本单位。
现在,进程只需要专注于资源分配就可以了,调度执行由线程来负责。
进程与线程是同时创建的吗?
在创建进程时,资源就已经分配。
因为一个进程中至少要有一个线程,也就可以说是,在创建第一个线程的同时,进程也就出来了。
总结: