python- 进程与线程 一

Posted su_sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python- 进程与线程 一相关的知识,希望对你有一定的参考价值。

问题1:什么是进程?

  • 把一个程序执行起来,处于执行状态的程序叫做进程。

  • 进程里面至少有一个线程:主线程。

  • 不同进程使用的内存资源都是相互独立的,互不影响和干涉。

  • 进程是操作系统分配资源的最小单位。

  • 进程肯定比线程占用的资源多一些。

问题2:什么是线程

  • 是操作系统能够进行运算调度的最小单位。

  • 它被包含在进程之中,是进程中的实际运作单位。

  • 一条线程指的是进程中一个单一顺序的控制流。

  • 一个进程可以并发多个线程。

问题3:进程的特征

  • 动态性:进程的实质是程序在多任务系统中的一次执行过程,进程是动态产生,动态消亡的。

  • 并发性:任何进程都可以同其他进程一起并发执行。

  • 独立性:进程是一个独立运行的基本单位,同时也是系统分配资源和调度的独立单位。

  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度执行。

问题4:进程的结构特征

  • 进程由程序、数据和进程控制块三部分组成

问题5:CPU的组成

  • CPU由运算器、控制器和寄存器组成

  • 运算器是对数据进行加工处理的部件。(算法运算、逻辑运算、数据传递和移位等)

  • 控制器是负责从存储器(内存和硬盘)中取出指令,指挥和协调计算机各器件进行工作的部件

  • 寄存器是CPU内部高速独立的暂时存储单元(容量很小)

问题6:什么叫进程切换

  • 进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。

问题7:python和java

  • python:既可以支持多进程也可以支持多线程。(多线程无法使用多核CPU的并行计算能力,密集IO型,多进程可以使用多核CPU的并行计算能力,密集计算型)

  • java只有多线程

  • python的多线程不能利用多核CPU的原因是:GIL锁产生很多的同步操作,无法并行,效率很低,无法使用多核CPU。

问题8:什么是同步、异步、阻塞

  • 同步就是有顺的执行,步骤之间有依赖关系。

  • 异步就是完成任务没有先后依赖的关系,可以同时去执行。

  • 阻塞:等待完成任务(读写文件、网络IO、挂起、sleep),完成之后转为就绪状态

问题9:进程运行状态

  • 1)就绪状态:进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配了处理器,进程就可以执行。

  • 2)运行状态:进程占用处理器资源,处于此状态的进程的数目小于处理器数目。

  • 3)阻塞状态:由于进程等待某种条件,再条件满足之前无法继续执行。

 

 

 

 

 

问题10:进程状态转换

 

 

  • 内存(主存):直接给CPU提供存储、高速、低容量、价格贵,不能永久保存数据,断电消失, 需要从辅存中重新调入数据。常见的内存有:CPU的高速缓存

  • 外存(辅存):给主存提供数据、低速、大容量、价格低,能永久保存数据。常见的辅存:硬盘、光盘、U盘、磁盘、移动硬盘。

  • 活跃就绪:是指进程在主存并且可被调度的状态。

  • 静止就绪:是指进程被换到辅存中的就绪状态,这个状态是不能被直接调度的。

  • 活跃阻塞:是指进程已在主存中,一旦等待的事件产生便进入活跃的就绪状态。

  • 静止阻塞:是指进程被换到辅存时的阻塞状态,一旦等待的事件产生便进入静止就绪状态。

问题11:进程的创建过程

(一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat()按下属步骤创建一个新的进程)

  • 申请空白PCB(进程控制块)。

  • 为新进程分配资源。(程序、数据、内存空间)

  • 初始化进程控制块(初始化标识信息,初始化处理机状态信息,初始化处理机控制信息)

问题12:进程的终止

  • 正常结束:程序正常,能顺利执行

  • 异常结束:在进程运行期间,由于出现某些错误和故障而迫使进程终止。

  • 外界干预:操作人员或操作系统干预,符进程请求,父进程终止。

  • 如果系统发生了上诉要求终止进程的某事件后,OS便调用进程终止语句,按下述过程去终止指定的进程。

问题13:引起进程阻塞和唤醒的事件的情况

  • 当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能变为阻塞状态来等待,一旦要求得到满足后,进程被唤醒。

  • 当进程启动模组操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成,该操作完成后,将该进程唤醒

  • 对于相互合作的进程,如果其中一个进程需要先获得另一进程提供的数据才能运行一堆数据进行处理,则是要起所需数据尚未到达,该进程只能(等待)阻塞,等待数据到达后,该进程被唤醒

  • 系统往往设置一些具有某特定功能的系统进程,每当这种进完成任务后,便把直接阻塞起来以等待任务到来,任务到达后,该进程被唤醒。

问题14:阻塞唤醒,进程阻塞的过程

  • 在执行的过程,当发现上述某事件后,由于无法继续执行,于是进程便通过调用阻塞原语block把进程直接阻塞,进程的阻塞是进程滋生的一种主动行为

  • 当被阻塞的进程所期待的事件出现时,如I/O完成或者所期的数据已经到达,则由有关进程调用唤醒原语wakeup(),将等待该事件的进程唤醒。

问题15:进程的调度算法

  • 先进先出

  • 时间片轮转算法

  • 最高优先级算法

问题16:并发和并行的区别

  • 并发:在一个时间段内,同时做几个任务。一个老师在1个小时内,分别看5个同学的作业

  • 在同一个时间点,同时做任务。5个老师在1个小时分别看1个同学的作业

备注:

多进程:可以使用多核CPU,应用场景:计算密集型
多线程:因为GIL锁,不可以利用多核CPU,应用场景:IO密集型
协程:单线程,没有并行,卡尼起来是个并发,不需要实现锁(更轻量,不能利用多核CPU)

以上是关于python- 进程与线程 一的主要内容,如果未能解决你的问题,请参考以下文章

Python之线程与进程

Python(12)进程与线程

Python--进程与线程

Python多进程和多线程

python中GIL和线程与进程

python的进程与线程