进程/线程/线程池等各种概念分不清?

132 阅读5分钟

作为一个测试,时常会被RD一些各种名词,通常都只是一知半解(猜),傻傻分不清说这些名词到底是什么。

本期,我们一起来对日常工作中频繁出现关于多线程的名词,进行系统学习。

什么是进程?

记得以前上计算机基础的时候,知道了进程基本概念:

进程是资源分配的最小单位

浅理解就是:在操作系统中启动一个程序,就会开启一个进程。进程执行时,系统会对该进程分配执行空间。

一旦进程被创建,就是一次性执行过程,动态执行过程,存在就绪、运行和终止等7种状态

操作系统中会同时运行多个程序,也就是多个进程。每一个进程都会对其进行分配内存资源。

image.png

操作系统把可执行程序核心运行数据加载到内存中,并创建一个进程。

进程存在意义?

操作系统可以同时执行多个进程,实现并发编程效果,高效

进程之间的共享那些资源?

消息队列、共享内存、管道、信号和套接字

什么是线程?

线程的官方概念:

线程是CPU调度执行的最小单位

怎么理解上述最小单位?

  • 线程实现并发执行进程中具体代码的机制
  • 线程是被包含在进程中的,一个进程中至少包含1个线程
  • 同一进程的不同线程间共享进程的资源
  • 线程的状态也是动态,包含就绪、阻塞和运行状态

image.png

CPU怎么调度线程的?

  • 一个核就是一个CPU,CPU通过时间片轮转来获取线程机器指令
  • CPU调度方式有两种:分时调度和抢占式调度
  • 分时调度是让所有的线程轮流获得CPU的使用权,并平均分配每个线程占的CPU时间片
  • 抢占调度是优先让运行池中优先级高级的线程占有CPU

同一个进程的不同线程之间可以共享那些资源?

  • 堆,进程启动的时候开辟出来的空间
  • 全局变量,全局变量不受具体的函数和不受具体线程拥有,全局变量是共享资源
  • 静态变量,在内存中存放在静态存储区,与全局变量是同等的
  • 文件资源,文件资源由系统管理,多线程之间的共享
  • 进程代码段、进程的公有数据、进程打开文件描述符、信号的处理器、进程的当前目录

注意

  • 栈:每个线程之间都有自己独立的空间,每个线程不共享

进程与线程的区别?

  • 进程包含线程,进程是资源分配的最小单位,线程是CPU调度的最小单位
  • 进程与进程之间不共享资源,创建和销毁速度比线程更慢

任务执行三种状态

在操作系统中,启动一个进程,从进程创建开始就会不停地改变其运行状态。

通过一个运行的进程有三种状态:就绪态、运行态和阻塞态

  • 就绪态:

    • 当进程获取除了CPU外其他必要的资源,只要CPU便可以执行程序,此时进程状态称为就绪状态
    • 在一个系统中处于就绪状态的进程可能有多个,会组成一个队列,称之为就绪队列
  • 运行态:

    • 当进程已经获取CPU操作权限,其程序正在运行,此时状态就是运行状态
  • 阻塞态:

    • 当CPU正在执行其他进程,进程处于等待阶段叫做阻塞
    • 引起阻塞原因有I/O操作、高优先级抢走CPU权限等

image.png

  • 就绪态->运行态

    • 进入队列中等待的进程获取到CPU时间片权限后,进程就进入到运行态
  • 运行态->就绪态

    • 当运行态的进程把分配的时间片用完了,失去了CPU使用权权限,进程的状态从运行态到就绪态
  • 运行态->阻塞态

    • 当运行的进程遇到I/O操作或者优先高的任务抢走CPU使用权限而无法继续执行时,进程的状态从运行态转为阻塞态
  • 阻塞态->就绪态

    • 当CPU处理完优先级高的任务后,阻塞的进程就会转换为就绪态

任务提交的两种方式

  • 同步

    • 同步是指发送方法发送数据后,必须要等待接收方法返回响应后才能发送下一个数据
    • 同步是两个程序运行是相互关联的,其中一个处于阻塞等待状态,另外一个程序才能运行
  • 异步

    • 异步是指发送方发出数据后,不等待接收方发回响应,接着就发下一个数据

    • 异步是两个线程毫无相关,可以各自运行

进程池

进程池是资源进程,管理进程组成的技术的应用

进程池特点

  • 节省手动创建大量的进程,手动创建大量进程,会花费大量的时间
  • 对大量执行完的进程进行及时销毁,避免造成大量资源
  • 在python中提供了pool去创建进程池

进程池执行过程

  • 进程池中可以指定最大的进程数
  • 当进程池中没有满时,如果有新的请求到pool,进程池会自动创建一个新请求到池中,
  • 当进程池进程数满时,新的请求会等待,直到池中的进程有结束的,才会创建新的进程来执行
  • 进程池实现了上下文管理协议,可以通过with来管理进程池

image.png

总结

操作系统相关的知识在学校没有好好学习,现在重新温故知新。进程、线程在工作中遇到不会再迷糊啦。

以上是本期内容,欢迎大佬们点赞评论,下期见~~

本文正在参加 「金石计划 . 瓜分6万现金大奖」