Python 进程原理 —— 《餐厅里的故事》

2023-11-05

在说明进程之前引入几个概念,本文向你诠释,并行,并发,同步,异步,阻塞,非阻塞,进程等概念~

如果不理解这几个概念,在学习进程过程中时刻都在给自己预设障碍,所以我痛定思痛,先了解进程工作原理

概念1:单道程序与多道程序

不在赘述单道程序的工作原理,我来讲一个生活的小例子,让你明白单道程序大概是个什么概念,当然以下只是个假设,你假设你的生活场景就是如此单纯,我只是用生活中的场景去模拟计算机程序计算运行的指令单纯性,你不能把个人观点切实的搬进现实生活

单道程序

假设你在餐厅吃饭,你点了两道菜,我们分别叫菜A和菜B,但是这个餐厅有个奇葩规定,顾客必须吃第一道菜,并且厨师检查后才能吃第二道菜(单道程序),至于你吃了几口,吃的时候是用什么工具,都是你自己的事情,但是切记,菜A是西红柿炒鸡蛋,你只能吃西红柿鸡蛋,你不可能吃出土豆,厨师只关注它给你菜,你处理菜后再给他的过程,理解程序任务就是,厨师做菜并检查菜的处理结果(程序计算),而你吃饭的过程叫做I/O,理解这个很重要

厨师(CPU)在做菜A(程序计算)的时候,你(I/O)在等待菜A,你吃菜A的时候(I/O处理计算数据)厨师在等待,你吃完了,厨师检查吃的结果,然后厨师在做菜B,重复以上步骤,假设厨师做一道菜是2分钟,你吃一道菜是10分钟,厨师检查是1分钟,总之你要知道你吃饭的速度是远远低于厨师的做饭和检查速度的,你吃一顿饭下来的时间是,菜A+菜B

多道程序

单道程序极大的浪费了厨师的时间和你的时间,于是乎有了新的规定,做完菜A,可以直接做菜B,你先吃好哪道菜,就检查哪道菜,如果你的菜A是炖肉,那即便菜A还没做完也可以去做菜B,这样就大大的减少了厨师的做菜时间和效率

重要理解1:菜A和菜B是单独的两道菜,拥有自己的制作工序和方法

               2: 菜A和菜B都在做的过程中,但都没做完

               3: 两道菜在交替的做(串行),但都轮流的使用一个规定流程

进程

每道菜制作过程中叫做进程,每道菜里面至少需要一个食材(线程)PS:每个食材都有自己的生长模式,仅为概念转换,不要硬搬理解在其他概念解释模式内

每道菜的制作方法的菜谱和材料你可以理解为程序逻辑文件,只是让你可以这么理解

菜谱A有西红柿炒鸡蛋,菜谱B是土豆炒肉,在彼此两道菜的进程运行中,都是单独内存隔离存放的,菜A的不会影响菜B

进程是每道菜在做的过程中叫进程,不然他永远是放在内存里的一些,食材和制作方法,调料,这些东西你可以理解为程序文件,堆栈,数据区域,文本区域等等。。

进程动态性:一道菜有开始制作就有结束,进程是暂时的

进程并发性:不管有几道菜都可以同时去做

进程独立性:每道菜制作方式都不会影响其他的菜

进程异步性:可以参见上面的多道程序概念

进程调度

先来先服务:厨师最简单的行为模式就是先来先服务的调度算法,这个算法生产菜的过程中,也可以用于开始制作菜的先后,对厨师来说,非常有利于厨师长时间繁忙作业,但不利于准备吃饭的你长时间作业

优先调度:短作业,如果厨师在做饭时你突然想吃一个水果,想喝一瓶水,这是优先级最高的,这会打断厨师的作业进程,从而让厨师及时的处理正在进程中的菜,但他同样也占用了厨师(CPU)的处理时间,切记厨师必须知道拿一个水果和一瓶水的时间,如果让厨师拿一个水果得从几里地开外的农田里去采摘,这明显是不符合逻辑的,多级反馈队列调度是可以忽略这个问题,你就了解优先调度即可

时间片:餐厅有如下菜需要厨师去做,菜A,菜B一直到菜n,餐厅要求每道菜制作时间是有规定的,菜A制作1分钟,超过1分钟没做完的,菜A的剩余工序会排列在菜B之后等待处理没,菜B做完了,菜A剩下的时间还是超过1分钟,那就分到菜C之后(详细的大家自己百度)

多级反馈队列调度

菜A到菜n每道菜的制作时间不同,需要对菜的简易程度去做排列,用时越短的菜,优先级越高

菜A做完了,去做菜B,以此类推做到菜X,突然说菜A需要加盐,这个时候终止菜X,为菜A加盐,而菜X重新放在菜X队列末尾,这个解释有点牵强附会,只能勉强可以这么理解

并发与并行

理解了以上的概念之后这个就很好理解了

并发是指一个厨师按照多道技术去处理菜A和菜B,都占用了厨师的时间和单独计算流程,同时给你端到餐桌上,但对于你来说,你觉得两道菜是同时完成的

并行是指两个厨师(cpu)分别处理菜A和菜B,每个厨师都可以用多道技术去做菜C到菜n

如果四个厨师六道菜,厨师A做菜A,厨B做菜B以此类推,四个厨师分别做这菜A,B,C,D,如果厨A在处理菜A的过程中需要等待一会,理解为程序中input、sleep、文件输入输出、recv、accept等,这个时候厨A就会去做菜E,当菜A的等待时间完成之后,菜A可能交给任何一个厨师去做

同步/异步/阻塞/非阻塞

在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞

同步

你去餐厅吃饭排队,你必须等待你前面的人都拿到餐走后你才能往前走一步这就是同步机制

所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。其实就是一个程序结束才执行另外一个程序,串行的,不一定两个程序就有依赖关系

异步

你去餐厅吃饭排队,你领取了一个取餐号码,你去到一边打游戏,打电话或者干其他的事情,你只需要后厨通知你的餐做好了去取即可

所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列

从以上例子可以看出,同步机制是阻塞的,异步机制是非阻塞的

但异步可以被阻塞吗?答案是肯定的,如果你排队领到了取餐号码,但不允许你做其他任何事,你只能等待后厨通知你的餐做好了,这也是一种被设定阻塞,但一般没这么干的,你只要知道异步也可以被阻塞即可

进程的创建与结束(了解就行)

此段了解就行,进程本身就是暂时的,但是你要知道他可以随时被中断,打开,和结束即可

厨师可以用多道技术处理多道菜,但每个顾客的口味不同,他做出的菜根据不同顾客口味去添加食材的配料,厨师做了茄子盖饭,顾客希望加肉末,然后厨师对徒弟说,你去切做肉沫,然后徒弟就去做茄子肉沫盖饭,这就是子进程(解释比较牵强),但徒弟的进程,不会影响厨师的进程,他们只是共用厨房里面的一些食材和配料

进程的结束 

正常结束:做菜过程中,觉得老板太抠门,不特么做了,(自愿结束)

出错结束:做菜的时候把糖给当成盐给放了(自愿结束)

严重错误:做菜的时候错误操作煤气,厨房炸了(非自愿)

被其他进程杀掉:厨师A跟厨师B有恩怨,厨师B正在做饭,厨师A拿起刀就把厨师B给干掉了,厨师B被动结束(非自愿)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 进程原理 —— 《餐厅里的故事》 的相关文章

  • Win11微软账号登录不上?Win11登录Microsoft账户出错的解决方法

    Win11微软账号登录不上 近期有部分Win11用户反映在登录微软账号会出现一直转圈 无法登录的情况 这样导致部分功能都不能正常使用了 为此十分令人头疼 那么对于这一情况 有没有什么方法可以有效的解决呢 下面小编教给大家操作方法 大家可以去
  • 计算机领域中随处可见的抽象

    想要管理多种具体的东西 那么需要遵守每种东西的规范 如果想要提供一种通用模式来对这些具体的东西统一管理 需要使用一种古老的技术 抽象 抽象是将多种具体的东西 管理时需要遵守的规范 的共同点抽取出来 放入到更高一层的抽象层 在抽象层不定义或少
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • 操作系统PV操作及读者写者问题

    操作系统PV操作及读者写者问题 目录 1 信号量 2 P V操作原语可描述为以下式子 3 解释 4 互斥模式原理 5 同步模式原理 6 读者写者问题 1 信号量 PV操作与信号量的处理有关 信号量是表示资源的实体 是一个与队列有关的整型变量
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Windows 添加永久静态路由

    route add p 10 10 0 0 mask 255 255 0 0 10 10 6 1 p 参数 p 即 persistent 的意思 p 表示将路由表项永久加入系统注册表
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • Visual studio 2005 hangs on startup AppHangXProcB1 svchost devenv.exe svchost.exe:{2a811bb2-303b-48b...

    This problem has been torturing me for the whole afternoon and after searching on the web for a long time I finally get
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮

随机推荐

  • WDS1期第12课 字符设备驱动 7 async异步通知用户空间 驱动代码的kill_fasync函数通知用户的signal函数 fcntl

    前面的query interrupt poll都需要用户程序去主动去读或查询 async异步通知 可以由驱动程序主动去通知用户程序中断的到来 信号也可以通知TASK INTERRUPTIBLE的进程 SIGKILL可以杀掉任何进程 就是传说
  • javascript之数据遍历

    JavaScript之数据遍历 for循环 var a 沐水莲心 22 男 for var i 0 i
  • WIFI 信道 channel

    5GHz 信道划分 国内室内AP可用36 40 44 48 52 56 60 64 149 153 157 161 165等13个信道 2 4GHz 共有14个信道 国内可用1 13信道 不干扰的仅1 6 11
  • Linux多线程

    全文目录 线程概念 线程缺点 线程的如何看待进程内部的资源 进程vs线程 线程控制 pthread库 pthread t 线程创建 线程等待 线程分离 线程退出 总结 线程互斥 互斥量接口 互斥量实现原理 总结 线程安全与可重入 常见的线程
  • CMake应用:基础篇

    CMake是一个开源 跨平台的编译 测试和打包工具 它使用比较简单的语言描述编译 安装的过程 输出Makefile或者project文件 再去执行构建 在使用IDE开发软件的过程中 代码的编译和构建一般是使用IDE自带的编译工具和环境进行编
  • 什么是面向接口编程、面向过程编程、面向对象编程?

    1 什么是面向接口编程 IOP 面向接口编程 Interface Oriented Programming IOP 是一种编程思想 接口作为实体抽象出来的一种表现形式 用于抽离内部实现进行外部沟通 最终实现内部变动而不影响外部与其他实现交互
  • (毕业设计资料)基于STM32智能窗帘控制系统设计

    096 电路方案 基于STM32智能窗帘控制系统设计 基于STM32单片机的智能窗帘控制系统 该系统集蓝牙遥控 人声识别控制 空调红外遥控 24c02数据储存 433m遥控 热释电红外感应 温湿度检测以及光控为一体 并可根据需求设置窗帘开合
  • Java中的内存泄漏例子以及对应解决方案

    转自How Memory Leaks Happen in a Java Application 英语好的可以去原网站瞅瞅 1 什么是Java中的内存泄漏 内存泄漏的标准定义是当应用程序不再使用对象 但垃圾回收器无法将它们从工作内存中删除时发
  • 【上拉下拉功能】GPIO的上拉下拉功能说明

    GPIO的上拉下拉功能说明 2011 07 11 14 36 394人阅读 评论 0 收藏 举报 The port pull up register controls the pull up resister enable disable
  • 华为校招机试题-查找单入口空闲区域-2023年

    题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是由连通的 O 组成的区域 位于边界的 O 可以构成入口 单入口空闲区域即有且只有一个位
  • 【华为OD机试】返回矩阵中非1的元素个数(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • UID卡、CUID卡、FUID卡的区别

    UID卡 国外称GEN1 所有区块可被重复读写 卡片ID可改且使用后门指令更改ID ID可被重复修改 响应后门指令 意味着可被使用后门指令检测是否为克隆卡的机器发现 CUID卡 国外称GEN2 所有区块可被重复读写 卡片ID可改且使用普通写
  • stm32 串口发送和接收

    串口发送 include stm32f10x h Device header include
  • HTML+CSS 旋转照片墙!源代码(简易动画干货快收藏!!)

    拿走请三连 并注明出处 新手上路 路过的大佬请多多指教 动画特效为11张照片 环绕着旋转 照片可自改添加 源代码中用到的照片未上传
  • 本地上传文件到FastDFS命令上传报错:ERROR - file: connection_pool.c, line: 142, connect to server 192.168.0.197:221

    root ubuntu etc fdfs usr bin fdfs upload file etc fdfs client conf etc a jpg 2019 12 03 11 38 14 ERROR file connection p
  • MySQL学习(十七):数据类型之文本字符串类型

    文本字符串类型 类型 值的长度 长度范围 占用的存储空间 CHAR M M 0 lt M lt 255 M个字节 VARCHAR M M 0 lt M lt 65535 实际长度 1个字节 TINYTEXT L 0 lt L lt 255
  • 如何使用BBP公式直接计算π的第n位

    使用BBP公式可以直接求得十六进制 的第n位而不需要计算前n位的数 讲道理 我认为是可以计算十进制的第n位的 毕竟其本身就能直接计算出十进制的 但我没试 其优点在于可以进行分布式计算 即将一个耗时的运算拆分成若干个运算单元在不同的机器上进行
  • 芯片可靠性与商规、工规、车规

    在芯片的国产化浪潮下 国产芯片的出货量和替代率近年来迅速飙升 按出货量比率看 消费电子领域 电源管理芯片和射频前端芯片国产替代率已超过70 工控通信领域 电源管理和信号链芯片国产替代率也超过20 汽车电子领域 电源管理和功率器件的国产替代率
  • 【OpenAI】私有框架代码生成实践

    作者 京东零售 牛晓光 根据现有调研和实践 由OpenAI提供的ChatGPT GPT 4模型和CodeX模型能够很好的理解和生成业界大多数编程语言的逻辑和代码 其中尤其擅长Python JavaScript TypeScript Ruby
  • Python 进程原理 —— 《餐厅里的故事》

    在说明进程之前引入几个概念 本文向你诠释 并行 并发 同步 异步 阻塞 非阻塞 进程等概念 如果不理解这几个概念 在学习进程过程中时刻都在给自己预设障碍 所以我痛定思痛 先了解进程工作原理 概念1 单道程序与多道程序 不在赘述单道程序的工作