Python并发编程之进程理论

前言

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

进程和程序

计算机上的未运行的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.当进程被创建完成并初始化后,会变成就绪状态。

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值