进程和线程

226 阅读3分钟

线程和进程

基本概念

进程

  1. 啥是进程,首先明白电脑中的.exe文件被称为可执行文件,在双击执行之后这些文件将被加载到内存当中,并且CPU开始执行.exe文件的内部指令,那么这些跑起来的可执行文件就称为进程。

  2. 进程又是操作系统资源分配的基本单位,从编程的角度来看可以将进程看成一个类,本质上就是一个PCB(进程控制块),一个C语言的结构体,存在以下属性

    • pid:进程ID,身份标识符;
    • 文件表述符表:运行过程中和文件打交道(记录打开,关闭,读写文件操作);
    • 状态:就绪,阻塞等状态;
    • 优先级:先给谁分配时间,后给谁分配时间;
    • 记账信息:记录了每一个进程执行了多久,执行了哪些指令,等待了多久等调度信息;
    • 上下文:记录上次进程调出时的状态,方便下次在上CUP执行的时候回到上次调出时的状态(存档+读档)。
  3. 进程调度实际上就是操作系统在考虑CPU资源如何给各进程分配

    • 操作系统运行着很多的进程 一个进程挂了 不会影响到其他进程,这就是进程的独立性,他依仗了虚拟地址空间

    • 但在实际中进程之间也要互相交换资源 那么操作系统就提供了一块公共的地址空间,叫做进程间通信。目前常见的通信方式是文件操作和网络操作

线程

  1. 线程是操作系统调度执行的基本单位,线程的存在他是一个更轻量级的进程。一个进程的创建和销毁就涉及到资源的分配和释放,如果频繁的创建和销毁是非常低效的操作,而进程的存在就是完成并发这样的场景提高效率的。
  2. 那么线程就相当于是在一个生产车间中增加了一条流水线,和进程共享了资源(共用进程的文件和内存)所有线程整个创建、销毁、调度的成本都比进程低
  3. 其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。

Snipaste_2023-01-12_22-07-31.png

区别和联系

  1. 进程包含线程,一个进程当中可以有一个线程,也可以有多个线程。
  2. 进程和线程都是处理并发这样的场景,但是频繁的创建和销毁是非常浪费资源的,相比之下选择更轻量级的线程。
  3. 操作系统创建进程,要给进程分配资源,进程是资源分配的基本单位,线程是上CPU执行的,是执行调度的基本单位。
  4. 进程具有独立性,每个进程有自己的虚拟地址空间,一个进程挂了不会影响到其他进程,一个进程中的多个线程公用一块内存空间,一个线程挂了,可能会影响到这个进程中的其他线程。