一、进程、线程、协程定义

进程

进程是具有一定独立功能的程序关于某个数据集上的一次运行活动,是有系统进行资源分配和调度的一个独立单位。每个进程都有独立的内存空间,不同进程减通过进程间通信来完成通信。开销(栈、寄存器、虚拟内存、文件句柄等)大,但相对稳定安全。

线程

线程是进程的一个执行单元,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。一个进程可以有多个线程,这些线程共享这个进程的全部资源。线程间通信主要通过共享内存。但是由于GIL存在,一个单核CPU在时间点上只能有一个线程执行。

协程

协程,又称微线程,纤程。Coroutine
协程是Python中另一种实现多任务的方式,比线程占用更少的资源。协程自带CPU上下文,可以在协程之间切换,只要这个过程中保存或恢复CPU上下文那么程序还是可以运行的。
在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都是由开发者自己决定。

二、进程、线程、协程区别

  • 进程与线程

    • 地址空间:县城是进程内的一个执行单元,进程内至少有一个线程,每个线程共享该进程的地址空间,而进程有自己独立的地址空间。
    • 资源拥有:进程是自愿分配和拥有的单位,同一个进程内的线程共享进程的资源。
    • 线程是CPU调度的基本单位,但进程不是。
    • 二者均可并发执行
  • 协程与线程

    • 一个线程可以有多个协程,一个进程也可以单独拥有多个协程,这样在Python中就可以使用多核CPU。
    • 线程进程都是同步机制,而协程则是异步。
    • 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。