1.进程
进程就是任务,是跑起来的程序
用PCB(进程代码块)来描述进程 。每一个进程至少有一个PCB
进程的意义就是:让操作系统可以同时执行多个任务。 (不必说:要打开另一个程序,只能关闭当前程序。)实现了“并发编程(并行+并发)”的效果。
1.进程创建时:申请PCB 为新进程分配资源(内存+文件) 初始化PCB 将PCB插入就绪队列
2.进程销毁是:把PCB从链表上删除 将PCB记录里对应的资源(内存+文件)释放 销毁PCB
3.进程的创建和销毁以及 切换,都需要消耗大量的资源。难道:一个服务器程序,每来一个客户端,就创建一个进程,走了就销毁。效率太低(分配资源这个事情,对操作系统来说是个大活(蓝色处))。
4.为了防止进程创建销毁效率低下 线程
2.线程
意义:防止频繁创建销毁进程导致的效率低下
进程包含线程 。 一个线程对应一个PCB
如图
(该图来自别人的csdn,本人在原基础上编辑了下 -> 侵权删)
同一进程的多个线程,共享同一份资源(内存+文件)
本质:线程运行的本质就是函数的执行。函数运行时信息是保存在栈帧中的,因此每个线程都有自己独立的、私有的栈区 。由于操作系统可随时暂停线程的运行,所以需要保存线程运行的信息,这些信息就保存在线程的程序计数器中,下一次再运行该线程就能知道它从哪儿暂停以及该从哪儿继续执行(线程上下文)
如图类比:进程就是一个工厂,线程就是流水线,多个流水线共享工厂里的操作说明书、工具、一些零部件等(按照需求来拿共享部分里的东西)
1.( 一个进程可有多个线程【多个PCB】 )+ ( 进程里有共享部分【内存+文件】) 这些PCB里的内存指针、文件描述符表 ,其实是同一份东西,都指向共享部分,每个PCB按照需求去共享部分拿即可。
2.而状态、上下文、优先级、记账信息,则是每个PCB(线程)自己有一份
创建进程时默认至少有一个线程(流水线),该图有3个线程。销毁时:只用销毁掉一个不用线程;创建时:只用多加一个线程即可,大大减少了开销。所有把 线程称为“轻量级进程”
(创建/销毁线程的开销比创建/销毁进程的开销小)
进程是资源分配的基本单位,线程是调度执行的基本单位