• 进程以及线程


    目录

    🐼今日良言:希望是生命的源泉,失去它生命就会枯萎。

    🐯一、进程

    🐕1.概念

    🐕2.PCB

    🐕3.进程调度

    🐭二、线程

    🐑1.概念

    🐇三、进程和线程的联系和区别

    🐝1.联系

    🐝2.区别


    🐼今日良言:希望是生命的源泉,失去它生命就会枯萎。

    🐯一、进程

    🐕1.概念

    首先,先来认识一下,什么是进程(process)

    进程(process)又叫任务(task),打开任务管理器来观察一下当前正在运行的进程

     可以观察到,当前有很多进程正在运行.

    需要注意的是:一个程序运行起来才是进程,不运行不叫进程,只是一个程序.

    观察上面任务处理器,可以看到,每个进程都对应一些资源

     结合上述情况,可以说:进程是操作系统资源分配的基本单位.

    进程是一个重要的'软件资源',是由操作系统内核负责管理的.

    操作系统内核管理进程主要是通过:描述+组织

    描述:操作系统使用结构体来描述进程的属性,用来描述进程的这个结构体叫做PCB(进程控制块)

    组织:操作系统通过双向链表,来把多个PCB给串到一起(这里的双向链表并不是一个简单的双向链表)

    创建一个进程,本质上就是创建一个PCB节点(结构体),然后插入到链表中

    销毁一个进程,本质上就是从链表中删除一个PCB节点

    上面任务管理器中看到的进程列表,本质上就是遍历这个链表

    🐕2.PCB

    接下来,介绍一下PCB中哪些描述进程的特征

    1).pid

        进程的身份标识符(每个进程对应一个pid,唯一的数字)

       将人比作进程,那么pid就是这个人的身份证号

    2).内存指针

        内存指针指出了当前进程要用的内存是哪些

    3).文件描述符表

       硬盘上的文件等其他资源

      2) 、3)描述了进程持有哪些资源

    🐕3.进程调度

    现在CPU一般都是多核CPU,在设备管理器中查看当前是几核CPU

     如上图,是8核CPU,而进程有上百个,所以,该如何让这么多的进程'同时运行'呢?

    这里的'同时运行'并非真正的同时运行,而是'分时复用'.这里引入两个概念:并行和并发

    并行:微观上同一时刻,多个cpu上的进程,同时执行.

    并发:微观上同一时刻,一个核心上只能运行一个进程,但是它能对进程进行快速切换.

    快速切换指的是,在当前CPU上,先运行QQ,再运行QQ音乐,在运行微信,只要切换的速度足够快,宏观上让人感知不到

    并行和并发都是由操作系统内核负责处理的,应用程序(程序猿)是感知不到的,所以说,在应用程序这个角度,是无法区分并行和并发,因此,往往也把并行和并发统称为并发,除非显式声明,否则,谈到的并发就是并行+并发.

    为了给这些进程分配CPU资源,解决办法是:进程调度. 操作系统里面有一个重要的模块---调度器,就负责让有限的CPU来调度执行这么多的进程,如何实现这样的调度器就需要PCB的进一步支持.接下来介绍一下PCB中的其它一些属性,通过这些属性来完成进程调度.

    进程调度的相关属性:

    1).进程的状态

    就绪状态:进程已经准备好到CPU上去执行.

    运行状态:正在CPU上执行的进程.

    阻塞状态:短时间无法到CPU上执行的进程.

    以五人制足球比赛来举例,在五人制足球比赛中,是可以无限次换人的.

    在场边穿好球鞋球衣等各种准备工作都做好的轮换球员,准备上场踢球,此时这个状态就是就绪状态.

    而场上正在比赛的球员就是运行状态.

    被替补球员换下场的球员需要休息调整,暂时无法上场比赛,此时就是阻塞状态.

    2).优先级

    进程是有优先级的,操作系统在进行调度的时候,会优先调度执行优先级高的进程

    还是以一场足球比赛为例,水平越高的踢首发,次之的替补,而这里的水平就类似于优先级

    3).上下文

    操作系统在进行进程切换的时候,需要把进程执行的'中间状态'记录下来,保存好

    等到下次这个进程再次在CPU上执行的时候,就可以恢复上次的状态继续往下执行.

    这个操作类似于: 读档和存档  如下小游戏的读档和存档

     上下文本质上就是存档的内容

    进程的上下文,就是CPU各个寄存器的值

    (寄存器是CPU内置的存储数据的模块,保存的就是程序运行过程中的中间结果)

    保存上下文:就是把这些CPU寄存器的值,保存到内存中(PCB中)

    恢复上下文:就是把内存中的这些寄存器的值恢复回去.

    4).记账信息

    根据字面理解:就是记录账本信息

    记账信息是:操作系统需要统计每个进程在CPU上执行的时间和执行的指令条目,根据这个来决定下一阶段如何调度.

    🐭二、线程

    🐑1.概念

    在介绍线程之前,补充一点小知识.

    计算机引入'进程'最主要的目的是解决'并发编程'这样的问题.

    这是因为CPU进入了多核心的时代,CPU已经做的很小了,再往小做就很困难了,要想进一步提高程序的执行速度,就需要充分的利用CPU的多核资源.

    多进程编程,已经可以解决'并发编程'的问题了,已经可以利用CPU多核资源了.

    但是由于进程消耗资源多而且速度慢,创建/销毁/调度一个进程的开销都比较大,所以说为了解决进程消耗资源多且速度慢这个问题,线程应用而生.

    一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行着多份代码.

    线程也叫做'轻量级'进程

    在解决'并发编程'的前提下,让创建/销毁/调度 的速度更快一些.

    线程为什么叫做'轻量级'进程呢?它轻在哪里?

    这是因为,线程节省了申请资源/释放资源的操作.

    🐇三、进程和线程的联系和区别

    🐝1.联系

    1).进程中包含线程,一个进程中可能包含一个或者多个线程,但是不能一个也不包含.

    2).同一个进程里的多个线程之间,共用了这个进程分配到的所有资源(主要是指内存和文件描述符表)

     这就意味着,线程1  new 的对象,在线程2,3中都能直接使用.线程1打开的文件,在线程2,3中都能直接使用.

    🐝2.区别

    1).线程是操作系统调度执行的基本单位.

        如果一个进程中有多个线程,这多个线程都是独立在CPU上执行的

    2).进程是操作系统资源分配的基本单位.

  • 相关阅读:
    微信视频号怎么下载别人的视频
    Java正常加锁但是没有起作用的问题(纪实)
    mysql字段类型与oracle字段类型对应关系
    1844. 将所有数字用字符替换
    实时数据监控,三防平板在工业领域的应用解析
    系统架构设计:15 论软件架构的生命周期
    MoneyPrinterPlus全面支持本地Ollama大模型
    C语言 ini 文件读写【Iniparser库】
    netsh int ip 添加/删除 TCP 协议 excludedportrange 的方法
    计算机毕业设计Java网上主题超市系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://blog.csdn.net/qq_54469537/article/details/128147336