佘山网站建设,创造网站需要多少钱,中企动力邮箱设置,网站内容策划⭐ 作者#xff1a;小胡_不糊涂 #x1f331; 作者主页#xff1a;小胡_不糊涂的个人主页 #x1f4c0; 收录专栏#xff1a;JavaEE #x1f496; 持续更文#xff0c;关注博主少走弯路#xff0c;谢谢大家支持 #x1f496; 进程线程 1. 什么是进程PCB 2. 什么是… ⭐ 作者小胡_不糊涂 作者主页小胡_不糊涂的个人主页 收录专栏JavaEE 持续更文关注博主少走弯路谢谢大家支持 进程线程 1. 什么是进程PCB 2. 什么是线程3. 两者关系 1. 什么是进程
进程是操作系统对一个正在运行的程序的一种抽象换言之可以把进程看做程序的一次运行过程同时在操作系统内部进程又是操作系统进行资源分配的基本单位。 简单地说进程就是操作系统提供的一种 “软件资源” 。我们计算机正在运行中的程序就可以成为“任务”也叫做“线程”。
现在大多数用到的系统都属于“多任务操作系统”也就是同一时刻可以同时运行多个任务。 上图中的每个进程在运行时都需要给它分配一定的系统资源。 也就可以说进程是系统分配资源的基本单位。 当然也有 “单任务操作系统”比如很久之前手机就是同一时刻只能运行一个任务。
但是进程在进行频繁创建和销毁的时候开销是很大的 因为要不断地申请资源(CPU硬盘内存…)和释放。
而申请内存的时候又是很麻烦的先要指定一个大小然后系统内部把各种大小的空闲内存通过一定的数据结构给组织起来。当实际申请的时候就需要去这样的空间中进行查找找到个大小合适的空闲内存分配过来。
而线程的存在就是为了解决该问题
PCB PCB–进程控制块抽象(PCB Process Control Block) 计算机内部要管理任何现实事物都需要将其抽象成⼀组有关联的、互为⼀体的数据。在 Java 语⾔中我们可以通过类/对象来描述这⼀特征。 PCB也就表示了进程信息的结构体。
PCB的重要属性
pid–是进程身份标识同一个机器、同一时刻每个进程的pid是唯一的内存指针–指向进程使用的内存存放位置文件描述符–进程使用的硬盘的相关信息 支持进程调度的重要属性状态–就绪状态、运行状态、死亡状态、阻塞状态优先级–每个进程执行的优先顺序记账信息上下文–PCB中的数据结构 “保存上下文” 就是把CPU的关键寄存器中的数据保存到内存中(PCB的上下文属性中) “恢复上下文” 就是把内存中的关键寄存器中的数据加裁到CPU的对应寄存器中 2. 什么是线程
⼀个线程就是⼀个“执⾏流”。每个线程之间都可以按照顺序执⾏⾃⼰的代码。多个线程之间“同时”执⾏着多份代码。
线程在进程的基础上做了改进保持独立调度执行省去了“分配/释放资源”带来的额外开销。
在这里我们也使用PCB来描述一个线程在PCB中有一个属性–内存指针。 对多个现成的PCB的内存指针指向的是同一个内存空间。 但并不是随便几个线程就可以共享资源我们把能够共享资源的这些线程放在线程组中。
3. 两者关系
进程与线程是包含关系。每个进程都可以包含一个\多个线程。 在有线程之前进程是资源分配的基本单位也是调度执行的基本单位。 现在进程只需要专注于资源分配就可以了调度执行由线程来负责。 进程与线程是同时创建的吗 在创建进程时资源就已经分配。 因为一个进程中至少要有一个线程也就可以说是在创建第一个线程的同时进程也就出来了。
总结
进程是包含线程的每个进程的内存是相互独立、互不干扰的每个线程是一个独立的执行流可以执行一些代码并且单独的参与到cpu调度中每个线程有自己的一份资源状态、上下文、优先级、记账信息每个进程有自己的资源进程中的线程共用这一份资源(内存空间和文件描述符表)同一个进程中的线程之间可能会相互干扰引起线程安全问题线程并非越多越好要能够合适。如果线程太多了调度开销可能非常明显进程和进程之间不会相互影响。如果同一个进程中的某个线程抛出异常是可能会影响到其他线程会把整个进程中的所有线程都异常终止进程是资源分配的基本单位线程是调度执行的基本单位