Python学习笔记【week04day3】概念:进程、线程、协程、GIL、同步异步、串行并行、并发

概念:进程、线程、协程、GIL、同步异步、串行并行、并发

  • 进程(Process)
  • 线程(thread)
  • 协程(coroutine)
  • GIL(全局解释锁)
  • 同步
  • 异步
  • 串行
  • 并行
  • 并发
  • 个人总结

进程(Process)

  • 进程是系统进行资源分配和调度的一个独立单位
  • 程序是指令、数据及其组织形式的描述,进程是程序的实体。
  • 在面向线程设计的计算机结构中,进程是线程的容器。
  • 一个进程可以有多个线程

线程(thread)

  • 是操作系统能够进行运算调度的最小单位
  • 包含在进程之中,是进程中的实际运作单位。
  • CPU调度和分派的基本单位
  • 一个线程可以有多个协程

协程(coroutine)

  • 协程是一轻量级的线程,开销最小
  • 是一种程序组件
  • 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

GIL(全局解释锁)

  • GIL,the Global Interpreter Lock,直译为“全局解释锁”

  • GIL是Python解释器(Cpython)时引入的概念,GIL并不是Python的语言缺陷。

  • CPython在执行多线程的时候并不是线程安全的,为了线程间数据的一致性和状态同步的完整性。

  • Cpython中的多线程是“伪多线程”,因为GIL在单个CPU中一次只允许执行一个线程

  • 特性:

    • 弊端:对计算密集型的程序会产生影响(慢)
    • 优势:IO密集型
  • 如何解决全局解释锁对多线程的限制?

    1. 重写python编译器(官方cpython)如使用:PyPy解释器
    2. 调用C语言的链接库

同步

  • 按顺序执行。
  • 要等待前一个执行完成,才能执行下一个。

异步

  • 不按照顺序执行,并行执行。
  • 不用等待。

串行

  • 一条通道按顺序执行
  • “排一条队”

并行

  • 多条通道
  • 执行任务的数量小于或者等于cpu的数量

并发

  • 伪并行,实际上是由CPU高速交替执行的结果
  • 任务的数量大于cpu的数量
  • 用信号量来控制进程/线程的并发量

个人总结

1. .join()同步(线程/进程);不使用则是异步(线程/进程)。
2. 串行(单进程)、并行(多进程)用在进程中(跟CPU个数有关,即核数).(引出进程锁与信号量控制进程并发数)
3. 因为GIL机制(一次只允许执行一个线程)Python中常常使用“多进程+协程”的方式**

你可能感兴趣的:(Python学习篇,Python学习笔记)