概述:

什么是进程?什么是线程?

进程: 在任务管理器中一个任务就是一个进程 (一般情况下一个程序,就是一个进程)

线程: 启动一个进程之后,还有许多子任务需要同时处理,这些子任务就是线程 (一个进程可以有许多个线程,进程一旦结束,线程也会同时结束)

关系: 线程是进程的最小单位,一个进程最少会有一个线程

PID: 每一个进程都会被系统分配到一个PID用于识别 (Process Identifier:进程标识符) QQ截图20210217024727.pngQQ截图20210217025618.png QQ截图20210217025506.png

多进程与多线程的用途

之前写的程序都是单进程单线程程序, 但有时候不等于,需要同时处理某个信息,就需要使用多进程或多线程

但多进程与多进程使用起来非常麻烦 必须协调好通信,必须控制什么时候暂停任务,什么时候开始任务 哪个任务完成后,才能执行另一个任务

Python进程特点

os.getpid( )

os.getppid( )

os.getpid( )可以返回当前进程的PID os.getppid( )在子进程中,可以返回父进程的PID

我们试着写一个程序,并让它陷入死循环, 并进入任务管理器查看他的状态

  1. import os
  2. print(os.getpid())
  3. print(os.getppid())
  4. i =0
  5. while i<=3:
  6. pass
  7. print("done")

QQ截图20210217035835.png 文件被打开时,启动了(PID:22948)py程序, py程序有建立了一个(PID:24852)python的子进程。

我们会发现打开了两个进程,而我们的代码并没有建立子进程,原因python是脚本(解释性语言) python在(PID:22948)py**脚本被执行时,会生成子进程(PID:24852)**python解释器


单进程Python程序会有两个进程的原因:

最传统的C语言,如果想要执行源码,需要先将源码翻译成机器语言(可执行程序)才能运行 而脚本语言只要计算机装有解释器,就可以直接执行脚本源码,而不需要复杂的过程。

可执行程序: 是通过机器语言(可执行程序)直接控制CPU完成相应的工作 脚本程序: 是通过脚本语言(脚本程序)控制解释器(可执行程序)完成相相应的工作 (解释器也是一种特殊的可执行程序) (脚本通过解释器间接的对cpu进行操作)

L- 概述 - 图5> 因此.py程序在运行时,必须生成一个解释器进程时时翻译

而python不会生成机器语言,只会控制解释器如何去运行

虽然python方便,但是无任何python不能用于编写系统等底层的东西,python必须建立在已有系统的基础上

进程与线程的优缺点

进程 优点: 当一个子进程崩溃时,不会影响到其他子进程运行(如果是主线程崩溃,子线程必定崩溃) 缺点: 会占用较高的系统资源,尤其是windows,Linux系统会好很多(通常多进程任务会用Linux来做) 特点: 进程的变量是相互独立的,他们之间没有直接关联

线程 优点: Windows对子线程优化会比较好,线程的运行速度也会稍微快一点点 缺点: 1、当一个进程的子线程崩溃时,可能导致整个进程崩溃 2、Python的同一进程内多线程只会用到1个CPU,即使你有100核的CPU, 同时跑100个线程也只会在1个CPU里交替运行 (Python多进程可以利用到多核,但线程是没办法的) (C/C++不会有这个问题) 特点: 线程的变量是公用的,如果修改了一个全局变量,主线程和子线程都会受到影响

由于这两种形式的特点,有时候会考虑 多进程+多线程 的模式 当然能不用多进程和多线程是最好的选择

如何设计主、子进程(线程)之间的关系

一般情况下,都会用Master-Worker的工作模式 主进程(线程)负责分配任务 子进程(线程)负责执行任务