• 计算机是如何工作的??(多进程编程)


    本篇博客的重点知识是进程+进程的调度

    操作系统:像是windows,android,iOS等都是常见的操作系统

    下面是关于计算机在底层工作的原理流程图
    在这里插入图片描述
    在操作系统层面:

    1. 对上,要给软件提供稳定的运行环境。
    2. 对下,要管理好各种硬件设备(如鼠标,键盘等)。

    操作系统本身就是一个大话题,是一个非常复杂的软件,其中的功能非常多,**“进程管理”**就是一个与我们密切相关的模块
    一个运行起来的程序,就是进程
    进程(process)/任务(task)

    可以在任务管理器中查看到启动了哪些进程
    在这里插入图片描述

    进程管理(进程多了,才需要管理)

    1. 描述一个进程:使用结构体/类,把一个进程有那些信息,表示出来

    2. 组织这些进程:使用一定的数据结构,把这些结构体/对象放到一起

      例如,学生管理系统

      1. 明确每个学生相关属性信息
      2. 通过一定数据结构把这些学生的信息都放起来(例如通过表格等形式)

    进程的结构体里有哪些属性?(进程结构体PCB(process control block))

    1. pid 每个进程需要有一个唯一的身份标识
    2. 内存指针,当这个进程运行的时候,使用了哪些内存上的资源
    3. 文件描述符表,当这个进程运行的时候,使用了哪些硬盘上的资源
    4. 进程的运行,需要从操作系统这里申请资源,所以 进程是操作系统进行资源分配的基本单位 \color{red}{进程是操作系统进行资源分配的基本单位} 进程是操作系统进行资源分配的基本单位

    多进程编程

    进程调度

    进程调度的两种方式:

    并行
        同一时刻,两个核心,同时执行两个进程.此时这两进程就是并行执行的
    
    并发
        一个核心,先执行进程1,执行一会之后,再去执行进程2,再执行一会之后,再执行进程3....
        只要转换的做够快那么我们就可以认为进程1,2,3就是同时执行的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    下面我会使用通俗易懂的文字来对并行和并发进行解释:

    条件:
    现在假设我是一个漂亮的妹子
    同时有三个小哥哥A(有钱),B(长得帅),C(舔狗)在追求俺
    而俺和三个小哥哥都想交往,怎么办呢???

    在并行的视角去看:
    我可以把他们三个一起叫来,进行交往,这时候他们会碰面
    
    在并发的视角去看:
    我可以在
    周一、周二、周三把小哥哥 A 叫来和我交往
    周四、周五把小哥哥 B 叫来和我交往
    周六把小哥哥 C 叫来和我交往
    这样,如果我们
    把时间线当做一周来看,那么我是和其中的一个小哥哥进行交往
    但是,把时间线当做一年来看,那么我就是和三个小哥哥同时进行交往
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    很多时候我们都把“并行 + 并发”统称为“并发”

    并发程度更高了,就可以称为“高并发”

    进程调度(PCB)所需要的4个核心属性:(不只有四个属性)

    1. 进程状态

    简单认为,进程状态主要是这两个:
    就绪态:该进程已经准备好随时可以上CPU执行
    阻塞态:该进程暂时无法上CPU执行

    例如:
    还是上述条件
    每周给这三个小哥哥,安排时间表
    假设,A对我说,他要出差一个月
    默认情况下,这三个小哥哥都是随叫随到,我在排时间的时候就会非常灵活
    在以上情况中A就属于阻塞状态,B和C就是就绪状态
    现在我可以去安排
    周一到周四,和B
    周五周六,和C
    周天继续放假

    1. 进程的优先级

    进程之间的调度不一定是“公平”的,所以有的进程需要优先进行调度

    还是上述条件
    现在我给他们的调度安排个优先级
    例如:
    A 优先度最高
    B 其次
    C 最低
    所以每周排时间,优先排A, 其次排B, 最后排C

    1. 进程的上下文

    描述了当前进程执行到哪里这样的“存档记录”
    进程在离开CPU的时候就要把当前运行的中间结果,“存档”
    等到下次进程回来CPU上,在恢复之前的“存档”,从上次的结果继续往后执行

    例如:
    有一天,我和 A 在一起,A 给我说:下个月,我带你到马尔代夫去玩,你准备准备~~
    此时,我可以准备一套性感的泳衣
    第二天,我和B在一起,B 给我说:下个月,他妈妈要过生日,他想让我帮忙给挑个礼物,让我也准备准备~~
    这时候我准备买一部手机
    过了一段时间,此时 A 问我:你准备的怎么样了?
    我回答说:我把手机买好了
    B 问我:你准备的怎么样了??
    我回答说:我把性感的泳衣准备好了!
    此时明显上下文就对不上

    为了避免上述穿帮的情况,我就需要在安排时间的本子上面记录一下:
    和他们都做了啥样的事情,有啥是需要进一步完善的

    总结下来就是:
    在这里插入图片描述

    1. 进程的记账信息
      统计了每个进程,在CPU上执行了多久,可以作为调度的参考依据

    例如:
    按照之前的优先级,每周只给C 排一天时间,
    过了几个月之后,我就发现,C对我的太读逐渐冷淡了,
    舔的也是力不从心的,
    此时排查之前的时间表,原来是给C 的时间太少了,
    难怪感情就淡了,
    接下来的时间里给C 多排点时间,
    多给他尝尝甜头,
    就由不得他舔的不卖力了~~

    组织进程调度

    在这里插入图片描述
    进程间通信

    所谓进程间通信,就是在隔离性的前提下,找一个公共的区域,让两个进程借助这个区域来完成数据的交换
    在这里插入图片描述

    以上就是本博客对于操作系统的相关介绍了~~
    本篇博客的重点知识就是 进程+进程的调度
    学习本篇并不是为了讲线程,而是为了引出下一个知识点:线程!!!
    多进程编程 和 多进程编程,都能满足“并发编程”的需求场景
    而在Java编程中多使用,多线程编程
    关于多线程编程的具体内容,那么就请各位看官移步下篇辣🤣🤣🤣

  • 相关阅读:
    Day667.开发避免踩坑注意点 -Java业务开发常见错误
    【RA6M4学习RT-Thread相关bug答疑】
    Java 修饰符 private、default、protected、public 的应用实例 (方法)
    奥地利博士联培申请签证经验(奥地利签证)
    【语音识别入门】My-Voice-Analysis
    ES中type和keyword两个数据类型的区别
    【学习笔记之Linux】云服务器搭建
    主播三维能力总览
    布隆过滤器简单实现添加和判断功能
    基于SSM的电影小说网站设计与实现
  • 原文地址:https://blog.csdn.net/m0_74007393/article/details/130891287