线程和进程
基本概念
进程
-
啥是进程,首先明白电脑中的.exe文件被称为可执行文件,在双击执行之后这些文件将被加载到内存当中,并且CPU开始执行.exe文件的内部指令,那么这些跑起来的可执行文件就称为进程。
-
进程又是操作系统资源分配的基本单位,从编程的角度来看可以将进程看成一个类,本质上就是一个PCB(进程控制块),一个C语言的结构体,存在以下属性
- pid:进程ID,身份标识符;
- 文件表述符表:运行过程中和文件打交道(记录打开,关闭,读写文件操作);
- 状态:就绪,阻塞等状态;
- 优先级:先给谁分配时间,后给谁分配时间;
- 记账信息:记录了每一个进程执行了多久,执行了哪些指令,等待了多久等调度信息;
- 上下文:记录上次进程调出时的状态,方便下次在上CUP执行的时候回到上次调出时的状态(存档+读档)。
-
进程调度实际上就是操作系统在考虑CPU资源如何给各进程分配
-
操作系统运行着很多的进程 一个进程挂了 不会影响到其他进程,这就是进程的独立性,他依仗了虚拟地址空间
-
但在实际中进程之间也要互相交换资源 那么操作系统就提供了一块公共的地址空间,叫做进程间通信。目前常见的通信方式是文件操作和网络操作
-
线程
- 线程是操作系统调度执行的基本单位,线程的存在他是一个更轻量级的进程。一个进程的创建和销毁就涉及到资源的分配和释放,如果频繁的创建和销毁是非常低效的操作,而进程的存在就是完成并发这样的场景提高效率的。
- 那么线程就相当于是在一个生产车间中增加了一条流水线,和进程共享了资源(共用进程的文件和内存)所有线程整个创建、销毁、调度的成本都比进程低
- 其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。
区别和联系
- 进程包含线程,一个进程当中可以有一个线程,也可以有多个线程。
- 进程和线程都是处理并发这样的场景,但是频繁的创建和销毁是非常浪费资源的,相比之下选择更轻量级的线程。
- 操作系统创建进程,要给进程分配资源,进程是资源分配的基本单位,线程是上CPU执行的,是执行调度的基本单位。
- 进程具有独立性,每个进程有自己的虚拟地址空间,一个进程挂了不会影响到其他进程,一个进程中的多个线程公用一块内存空间,一个线程挂了,可能会影响到这个进程中的其他线程。