最近学习了进程与线程,想在博客上总结一下,有很大概率会有错误或者缺漏,如果有人发现还望指正,本人之后会做修改,多谢。
1.定义
1.1:进程
进程(Process)是操作系统分配资源的基本单位,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
1.2:线程
线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程实际运作的单位。
2.比喻
当一个可执行文件(程序)运行起来的时候就相当于开启了一个进程。
当一个进程开启时,计算机会分配一定的资源给该进程,而该进程会发布各种任务,这些任务由线程来完成,如果总程序的目的是运营餐厅,那么进程就相当于老板与餐厅本身(发布指令,提供资源),线程就相当于餐厅里的厨师和服务员等人(具体操作数据)。一个餐厅可以有多个员工(多线程),但员工数量也不能太多,不然会影响餐厅运营效率或者提高成本(线程不是越多越好)。
其实,当你打开一个应用程序的时候,就相当于开启了一个进程。举个栗子,我现在打开了网易云音乐,并播放了一曲音乐,这时就开启了一个线程;而我一边听音乐一边与上面的朋友聊天,这就又需要一个进程。如果只有一个进程的话,那么我就不能同时干两件事了。
3.区别
3.1:从属关系不同
线程属于进程,线程就相当于车间的工人,工人只是为车间服务的。
3.2:描述侧重点不同
进程是操作系统进行资源分配的基本单位,而线程是操作系统进行资源调度的基本单位,就相当于,进程是分配场地与任务的基本单位,而线程是干活的基本单位。
3.3共享资源不同
多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符
等信息,而线程可以共享进程资源文件(堆和方法区)。就相当于一个员工不可能即在餐厅A工作又在餐厅B工作,不同的餐厅之间是相互独立的,但是餐厅内部的员工可以相互协作,互相帮助。
3.4上下文切换速度不同
线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),
而进程的上下文切换的速度比较慢。想要改变一个员工的状态自然比改变一个公司的状态要来的容易。
3.5操纵者不同
⼀般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员