Python并发编程之进程理论

news2024/11/16 19:40:43

前言

本文将详细介绍进程相关概念。

进程和程序

计算机上的未运行的QQ、Wechat等都属于程序,但是一旦当这些程序运行起来的话,就可以被称为进程。因此可以如下定义程序和进程:

程序:就是存在硬盘上的一堆代码。

进程:就是正在运行的程序。

程序就是一堆代码的集合,本身并没有任何意义,就是一堆静态文件,进程是程序的执行过程,是一个动态的过程,程序可以作为数据长期存在与硬盘上,但是进程是有一定生命周期的,因此程序是永久的,进程是暂时的。

同样一个程序运行两次,就会在操作系统中出现两个进程,虽然是同一个软件程序,但是可以做不同的事情,比如打开两个QQ,一个可以登陆自己的账号,另一个可以登陆男朋友的账号---查岗(O(∩_∩)O哈哈~),但是这两个进程之间是互不影响的。

进程调度算法

如果想要多个进程交替进行,操作系统就必须对这些进程进行调度,这种调度并不是随机的,而需要遵循一定的法则,由此就有了进程的调度算法。

先来先服务(FCFS)调度算法

用户首先执行哪个任务,这个任务就会一直占用CPU直至这个程序运行结束,后面想要执行的任务必须等上一个任务运行完成。这种算法对于长作业比较有利,对短作业就没有那么友好了。

短作业优先调度算法

哪个任务运行的时间短CPU就先运行哪个程序,但对长作业不利,不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。

时间片轮转法 & 多级反馈队列

时间片轮转的基本思路基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。在时间片轮转法中,需要将CPU的处理时间分成固定大小的时间片,例如,几十毫秒至几百毫秒。如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务,则它自行释放自己所占有的CPU而重新排队,等待下一次调度。同时,进程调度程序又去调度当前队列中的第一个进程。

前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。 而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下图所述。

并发 & 并行

我们知道如果想让一个服务端同时对不同的客户端进行服务,该服务端就需要并发处理多个客户端的不同请求,而并发的核心就是单核CPU实现并发,并发的概念马上就会介绍哦。

并行 & 并发

无论是并行还是并发,在用户看来都是同时运行的,比如计算机上同时运行QQ、微信、浏览器等,真正干活的是CPU,一个CPU同时只能执行一个任务。

并行:是指两个或者多个任务同时执行,比如鸣人有分身术,做饭和洗衣服两个任务可以同时执行,并行需要多个CPU。

并发:是伪并行,在资源有限比如只有单核的CPU的情况下,实现看起来是同时运行的效果,单核CPU + 多道技术就可以实现并发。

单道技术 & 多道技术

单道技术就是一个程序执行完毕才会执行下一个程序,如下图所示:

多道技术就是针对单核CPU实现并发,现在的主机一般是多核,那么每个核都会利用多道技术。内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即伪并发,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)。因此多道技术就是CPU切换执行任务并保存任务执行状态。

进程运行的状态

一般说来,一个进程并不是自始至终连续不停地运行的,它与并发执行中的其他进程的执行相互制约。在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

1.当进程被创建完成并初始化后,会变成就绪状态。

2.处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程,进入运行状态;

3.当进程已经运行完成或出错时,会被操作系统作结束状态处理;

4.处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行;

5.当进程请求某个事件且必须等待时,例如请求 I/O 事件的时候就会从运行状态变为阻塞状态;

6.当进程等待的事件完成的时候,就会从阻塞状态变成就绪态

同步 | 异步 & 阻塞 | 非阻塞

同步和异步描述的是任务的提交方式。

同步:任务提交之后,原地等待任务的返回结果,等待过程中不做任何事情,就是干等,程序层面上表现出来的就是卡住了,比如你去吃饭点了菜之后,就站在那等老板把菜给你端来....

异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情。比如去吃饭点了菜,老板给了你号码牌,等做好了,老板会喊你,不必站在那等菜做好。

阻塞和非阻塞描述的是程序的运行状态。阻塞和非阻塞这两个概念与程序等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。

还拿上述点菜的例子来说,在等待菜做好的过程中,有的人就是干巴巴的等,什么也不做,这种机制就是阻塞态,表现在程序中就是程序一直阻塞在函数调用的地方无法继续执行;另外有些人在等上菜时会边打游戏边等,这样的状态就是非阻塞态。

同步阻塞形式的程序是效率最低的,拿上面的例子来说,就是你专心排队,什么别的事都不做。

异步阻塞状态,拿上面的例子来说就是拿着号码牌什么都不做。

同步非阻塞,实际效率也不高,以上面例子的来说就是站在那等菜顺便玩个游戏。

异步非阻塞是效率最高的,打游戏是你的事情,通知你拿菜的是老板的事情,再比如说这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉服务员说,排到我这个号码的时候麻烦到外面通知我一下,那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了。

很多人会把同步和阻塞混淆,是因为很多时候同步操作会以阻塞的形式表现出来,同样的,很多人也会把异步和非阻塞混淆,因为异步操作一般都不会在真正的IO操作处被阻塞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI】YOLOV1原理详解

1、简介 YOLO:You Only Look Once,一种对象检测算法,2016年由Redmon提出 优点:速度快,适合于实时检测任务; 缺点:准确度略低 2、其它算法对象检测原理 在YOLO出现之前,其它算法使用分类器对测试图像的不同切片进行评估。 例如,使用一个小窗口在图像上滑动来获取一小…

【标准化方法】(4) Weight Normalization 原理解析、代码复现,附Pytorch代码

今天和各位分享一下深度学习中常用的归一化方法,权重归一化(Weight Normalization, WN),通过理论解析,用 Pytorch 复现一下代码。 Weight Normalization 的论文地址如下:https://arxiv.org/pdf…

GEE:基于主成分分析(PCA)的风险筛选环境指标(RSEI)计算方法

作者:CSDN @ _养乐多_ 利用主成分分析(Principal Component Analysis, PCA)进行风险筛选环境指标(Risk-Screening Environmental Indicators, RSEI)的计算是一种常用的方法。本文介绍了基于主成分分析的RSEI计算方法,通过将多个基于遥感指数的环境指标转化为少数几个主成…

电脑cpu占用率高?怎么办?1分钟快速解决!

案例:电脑cup过高怎么办? 【我的电脑运行缓慢,导致我学习和工作的效率很低。刚刚查看了一下电脑,发现它的cpu占用率很高。有没有小伙伴知道如何解决此电脑cpu过高的问题?】 电脑是我们生活中不可缺少的工具&#xff…

Linux 多线程(1)线程概念与线程控制

多线程:概念、线程控制(创建、终止、等待、分离),线程安全(问题&实现),应用(生产者与消费者模型,线程池,单例模式) (重要&#xf…

linux系统(进程间通信)06_IPC概念,pipe管道,fifo通信,mmap 共享映射区

01 学习目标 1.熟练使用pipe进行父子进程间通信 2.熟练使用pipe进行兄弟进程间通信 3.熟练使用fifo进行无血缘关系的进程间通信 4.熟练掌握mmap函数的使用 5.掌握mmap创建匿名映射区的方法 6.使用mmap进行有血缘关系的进程间通信 7.使用mmap进行无血缘关系的进程间通信 02 IPC概…

Netfilter和iptables命令详解,从入门到精通

本文目录 1、netfilter架构和工作原则简介2、iptables操作命令说明2.1 、Filtering Specifications2.2、Target Specifications2.3、一个基于Linux的基本的防火墙的配置例子 netfilter 是Linux内核里网络部分的一个重要框架,内核通过netfilter完成IP报文的一些操作。…

缓存雪崩问题

缓存雪崩:指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量的请求到达数据库,带来巨大的压力 解决方案: 1.给不同的key的TTL添加随机值 2.利用redis集群提高服务的可用性 3.给缓存业务添加降级限流策略 4.给业务添…

扫雷,咱就是一扫一大片(C语言完美递归版)

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以…

零基础入门 Stable Diffusion - 无需显卡把 AI 绘画引擎搬进家用电脑

我从小特别羡慕会画画的伙伴。他们能够将心中的想法画出来,而我最高水平的肖像画是丁老头。但在接触 Stable Diffusion 之后,我感觉自己脱胎换骨,给自己贴上了「会画画」的新标签。 丁老头进化旅程 Stable Diffusion 是一个「文本到图像」的…

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 进阶版 基础版 基本介绍 MATLAB实现QRLSTM长短期记忆神经…

微波方向有哪些SCI期刊推荐? - 易智编译EaseEditing

微波方向的SCI期刊推荐包括: IEEE Transactions on Microwave Theory and Technology: 该期刊是电磁场与微波技术领域的著名期刊,被世界上许多研究机构和大学广泛引用。 IEEE Transactions on Antennas and Propagation: 该期刊…

C++学习记录——이십일 AVL树

文章目录 1、了解AVL树2、模拟实现3、旋转1、左单旋2、右单旋3、双旋(先左后右)4、双旋(先右后左) 4、检查平衡5、测试性能(随机数)6、删除 1、了解AVL树 如果数据有序或接近有序,二叉搜索树将…

Java+Python+Paddle提取长文本文章中词频,用于Echart词云图数据

公司有个需求,就是需要提供给echart词云图的数据,放在以前我们的数据来源都是从产品那直接要,产品也是跑的别的接口,那怎么行呢,当然有自己的一套可以随便搞了,那么操作来了 Java package cn.iocoder.yud…

推荐几款2023年还在用的IDE工具

近期有不少刚学编程的小伙伴来问我,市面上那么多IDE工具,该怎么选?今天在这里跟大家分享几款个人比较钟爱的IDE工具,供大家参考。 Visual Studio 优点:支持多种语言,包括C#, C, Visual Basic等&#xff0c…

【Linux】进程信号“疑问?坤叫算信号吗?“

鸡叫当然也算信号啦~ 文章目录 前言一、认识信号量二、信号的产生 1.调用系统函数向进程发信号2.由软件条件产生信号3.硬件异常产生信号总结 前言 信号在我们生活中很常见,下面我们举一举生活中信号的例子: 你在网上买了很多件商品,再等待不…

【跟着陈七一起学C语言】今天总结:函数、数组、指针之间的关系

友情链接:专栏地址 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误&#x…

深度学习实战29-AIGC项目:利用GPT-2(CPU环境)进行文本续写与生成歌词任务

大家好,我是微学AI,今天给大家介绍一下深度学习实战29-AIGC项目:利用GPT-2(CPU环境)进行文本续写与生成歌词任务。在大家没有GPU算力的情况,大模型可能玩不动,推理速度慢,那么我们怎么才能跑去生成式的模型…

14 KVM虚拟机配置-配置虚拟设备(其它常用设备)

文章目录 14 KVM虚拟机配置-配置虚拟设备(其它常用设备)14.1 概述14.2 元素介绍14.3 配置示例 14 KVM虚拟机配置-配置虚拟设备(其它常用设备) 14.1 概述 除存储设备、网络设备外,XML配置文件中还需要指定一些其他外部…

Python+selenium,轻松搭建 Web 自动化测试框架

在程序员的世界中,一切重复性的工作,都应该通过程序自动执行。「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的…