python-进程-线程-协程笔记

进程概念

  1. 每一个运行中的程序称为进程(就是应用程序执行的实例)
  2. 现代操作系统几乎是支持多进程并发执行

线程概念

  1. 线程是进程的组成部分,一个进程可以拥有多个线程
  2. 在多线程中,会由一个主线程完成整个进程从开始到结束的全部操作,其他线程会在主线程的运行过程中被创建或退出。

协程概念

  1. 一个线程,包含多协程。

  2. 协程由应用程序实现调度,线程由操作系统实现调度,不需要陷入内核

  3. 有中断,因而可以执行上下文,执行权限被挂起

协程组成

一个是具体的代码逻辑(通过代码地址引用)和所依赖的资源信息

从用户层来说需要保存变量和所用到的数据,从系统层来说,它需要保存调用时的寄存器信息,以便后续恢复执行时使用

调度概念

调度器负责将我们用户用协程编写的业务逻辑来运行调度

调度器通常在用户声明的一个协程的时候,去插入一些调度指令

转移其实同操作系统的调度差不多,将当前协程的上下文信息,进行保存,然后执行新的协程,加载执行

所以关系是:调度器—》用户线程—》内核线程—》CPU核。

线程里面可以有协程,协程有调度指令,使得他能够执行保存协程的上下文信息,然后执行新的协程,实现转移。(这协程的调度是基于应用程序的调度)

但是当线程是没有协程的,那么线程的调度是依赖操作系统的调度,那么线程多了,就会有大量的资源的消耗

所以并发模式会有线程模型,有协程模型。

线程分类

  1. 进程里只有一个线程:单线程
  2. 进程里超过一个线程:多线程

线程和进程关系

  1. 每一个线程都必须有自己的父进程
  2. 线程是可以拥有自己的堆栈,程序计数器,局部变量
  3. 但是不拥有系统资源,所以是和父进程的其他线程共享该进程所拥有的全部资源
  4. 因而线程是可以完成一部分任务;又可以和线程共享父进程的共享变量和部分环境。

全局解释器锁

python主程序只允许有一个线程执行

线程执行流程

  1. 获取 GIL
  2. 执行对应线程的代码
  3. 释放 GIL

并发概念

多线程----每个线程的执行一定会占用这个处理器一个时间片段,同一时刻,其实只有一个线程在执行。

如果使用多线程,处理器就可以在某个线程等待的时候,去执行其他的线程,从而从整体上提高执行效率。

因而有可能会出现IO密集型任务

IO密集型任务

启用多线程,处理器就可以在某个线程等待的过程中去处理其他的任务

并行概念

多进程----它是指同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行。并行只能在多处理器系统中存在

所以多核处理器是可以实现并行执行指令

因而可能会出现CPU 密集型任务

CPU 密集型任务

线程切换的过程中多耗费一些时间,整体效率会变低

线程的状态

线程生命周期:新建,就绪,运行,阻塞,死亡

python-进程-线程-协程笔记

进程的状态

主要是:就绪态,执行态,阻塞态

python-进程-线程-协程笔记

而从图中得到的是:

  • 新的:进程正在创建。
  • 运行:指令正在执行。
  • 等待:进程等待发生某个事件(如 I/O 完成或收到信号)。
  • 就绪:进程等待分配处理器。
  • 终止:进程已经完成执行。