python笔记(进程的基本概念)

1、进程:
第一,进程是一个容器。每一个进程都有它自己的地址空间,一般情况下,包括文本区域( text region)、数据区域(data region)和堆栈(stack region)。
文本区域存储处理器执行的代码;数据区城存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储看活动过程调用的指令和本地变量。
第二,进程是一个"执行中的程序"。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才 能成为一个活动的实体,我们称其为进程。
第三,进程是操作系统中最基本、重要的概念。是多道程序系统岀现后,为了刻圓系统內部出现的 动态情况,箍述系统內部眢道程序的活动规律引进的一个概念,所有多道程序设计搡作系统都建立在进程的基础上。

2、进程调度
要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,
由此就有了进程的调度算法

短作业:短作业(进〕优先调度算法(SJ/PF〕是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程凋度。
但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。

3、进程的并行与并发
并行:并行是指两者同时执行,比如赛跑,两个人都在不停的在前跑;(资源够用,比如三个线程,四核的CPU)
并发:并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)冋时只能过一个人,A走一段后,让给B,B用完继续给A,交替使用,
目的是提效率。
区别:
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。
进程三态状态装换图进程调度就绪(运行心提交时间片到释放创建事件发生件请求退出阻塞
见图

4、在了解萁他概念之前,我们首先要了解进程的几个状态。
在程序运行的过程中,由于被操作系统的调度算法控制程序会进入几个状态:就绪,运行和阻塞
(1)就绪:( Ready)狀态当进程已分配刭除℃門U以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
(2)执行/运行( Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态
(3)阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,
便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
见图

5、同步和异步
所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,
这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。
所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,
只要自己完成了整个仼务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。

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

7、同步/异步与阻塞/非阻塞
1.同步阻塞形式:
效率最低。拿上面的例子来说,就是你专心排队,什么别的事都不做。
2.异步阻塞形式:
如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发(通知),也就是领了一张小纸条,
假如在这段时间里他不能离开银行做其它的事情,那么很显然,这个人被阻塞在了这个等待的操作上面
异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞
3同步非阻塞形式:
际上是效率低下的。想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,如果把打电话
和观察排队的位置看成是程序的两个 操作的话,这个程序需要在这两种不同的行为之间来回的切换,效
率可想而知是低下的。
4.异步非阻塞形式:
效率更高,因为打电话是你等待者)的事情,而通知你则是柜台(消息触发机制舶事情,程序没有在两种不同的操作中来回切换。
比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉大堂经理说,排到我这个号码的时候麻烦到外面通知我一下,
那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了。
很多人会把同步和阻塞混淆,是因为很多时候同步操作会以阻塞的形式表现出来,同样的,很多人也会把异步和非阻塞混淆,
因为异步操作一般都不会在真正的I操作处被阻塞。

8、进程的创建:
但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要有创建进程的方式,
一些操作系统只为一个应用程序设计,比如微波炉中的控制器,一旦启动微波炉,所有的进程都已经存在。
而对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销 进程的能力,主要分为4中形式创建新的进程:
1.系统初始化(查看进程inux中用ps命令,windσws中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关
,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印)
2.一个进程在运行过程中开启了子进程(如ninx开启多进程, os fork, subprocess Popen等)
3.用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
4.一个批处理作业的初始化(只在大型机的批处理系统中应用)无论哪一种,新进程的创建都是由一个已经存在的进程执行
了一个用于创建进程的系统调用而创建的。

9、进程的结束:
1.正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在inux中用ext,
在 windows中用 ExitProcess)
2.出错退出(自愿, python a.py中a.py存在)
3.严重错误〔非自愿,执行非法指令,如引用不存在的内存,10等,可以捕捉异常,ty…except…)
4.被其他进程杀死(非自愿,如kill-9)

10、三种状态间的关系

在这里插入图片描述

在这里插入图片描述
11、操作系统中的进程:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41433183/article/details/85450274