Python二 —— 进程、线程和协程

发布时间:2023-06-05 19:00

文章目录

  • 2. Python 进程、线程和协程的关系
    • 进程
      • 进程的概念
      • 进程的特点
    • 并发与并行
    • 线程
      • 线程的概念
      • 进程和线程的区别
    • 协程
      • 协程的概念
      • Python中使用协程的例子

2. Python 进程、线程和协程的关系

进程

进程的概念

  • **进程是一个实体。每个进程都有自己的地址空间(CPU分配)。**实体空间包括三部分:
* 文本区域:存储处理器执行的代码
* 数据区域:存储变量或进程执行期间使用的动态分配的内存
* 堆栈:进程执行时调用的指令和本地变量
  • 进程是一个“ 执行中的程序 ”
程序是指令与数据的有序集合,程序本身是没有生命的,只有CPU赋予程序生命时(CPU执行程序),它才能成为一个活动的实体,称为“进程”。

概括来说,进程就是一个具有独立功能的程序在某个数据集上的一次运行活动

进程的特点

  • 动态性:进程是程序的一次执行过程,动态产生,动态消亡。
  • 独立性:进程是一个能独立运行的基本单元。是系统分配资源与调度的基本单元
  • 并发性:任何进程都可以与其他进程并发执行

并发与并行

并发:在操作系统中,某一时间段,几个程序在同一个CPU上运行,但在任意一个时间点上,只有一个程序在CPU上运行。

当有多个线程时,如果系统只有一个CPU,那么CPU不可能真正同时进行多个线程,CPU的运行时间会被划分成若干个时间段,每个时间段分配给各个线程去执行,一个时间段里某个线程运行时,其他线程处于挂起状态,这就是并发并发解决了程序排队等待的问题,如果一个程序发生阻塞,其他程序仍然可以正常执行

并行:当操作系统有多个CPU时,一个CPU处理A线程,另一个CPU处理B线程,两个线程互相不抢占CPU资源,可以同时进行,这种方式成为并行。

并发与并行的区别

  • 并发只是在宏观上给人感觉有多个程序在同时运行,但在实际的单CPU系统中,每一时刻只有一个程序在运行,微观上这些程序是分时交替执行
  • 在多CPU系统中,将这些并发执行的程序分配到不同的CPU上处理,每个CPU用来处理一个程序,这样多个程序便可以实现同时执行。

线程

线程的概念

  • 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。 线程的实体包括 程序,数据,TCB

TCB包括:

  1. 线程状态
  2. 线程不运行时,被保存的现场资源
  3. 一组执行堆栈
  4. 每个线程的局部变量
  5. 访问统一进程中的资源
  • 线程自己不拥有系统资源,只拥有一点运行中必不可少的资源。
  • 同一进程中的多个线程并发执行,这些线程共享进程所拥有的资源。

进程和线程的区别

  • 进程是CPU资源分配的基本单位,线程是独立运行和独立调度的基本单位(CPU上真正运行的是线程)。
  • 进程拥有自己的资源空间,一个进程包含若干个线程,线程与CPU资源分配无关,多个线程共享同一进程内的资源。
  • 线程的调度与切换比进程很多。

协程

协程的概念

协程是一种比线程更加轻量级的存在,最重要的是,协程不被操作系统内核管理,协程是完全由程序控制的。

协程的优势:

  • 运行系效率极高,协程的切换完全由程序控制,不像线程切换需要花费系统的开销,线程数量越多,协程的优势就越明显。
  • 协程不需要多线程的锁机制,因为只有一个线程,不存在变量冲突。
  • 对于多核CPU,利用多进程 + 协程的方式,能够充分利用CPU,获得极高的性能。

Python中使用协程的例子

yield关键字 相当于是 暂停功能,程序运行到yield停止,send函数可以传参给生成器函数,参数赋值给yield。

def customer():
    while True:
        number = yield
        print(\"开始消费:\", number)
 
custom = customer()
next(custom)
for i in range(10):
    print(\"开始生产:\", i)
    custom.send(i)

结果:

\"Python二

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号