Loading... ## 并发 处理多个待定任务,一次处理一个或者并行处理多个,直到所有任务最终都成功或者失败。对于单核CPU,如果操作系统的调度程序支持交叉执行特定任务,也能实现并发。 并发也叫做多任务处理 ## 并行 同时执行多个计算任务的能力。需要一个多核CPU,多个CPU,一个CPU或者一个集群中的多个计算机。 ## 执行单元 并发执行代码的对象的统称,每个对象的状态和调用栈都是独立的,Python支持3种:进程、线程和协程。 ## 进程 计算机程序运行的一个实例,消耗内存和cpu时间,每个进行隔离在自己的私有内存空间中。进程通过管道,套接字或者内存映射文件进行通信。 Python对象必须序列化为原始字节才可以从一个进程到另外一个进程。而且不是所有的Python对象都支持序列化。 进程可以派生子进程,子进程之间也是隔离的。进程支持抢占式多任务处理机制:操作系统调度程序会定期抢占运行中的进程,让其他进程运行。这意味着冻结的进程理论不会冻结整个操作系统。 ## 线程 单个进程中的执行单元,一个进程启动之后,只能使用一个线程,通过调用操作API,进程可以创建更多的线程,执行并发操作。一个进程内的现成共享相同的内容空间。因此,线程之间可以轻松共享数据。但是如果多个线程同时更新同一个对象,那么就会发生竞争现象,导致数据损坏。与进程一样,线程在操作系统调度程序的监督下也可以实现抢占式多任务处理。对于同一份作业,线程消耗的资源比进程少。 ## 协程 可以挂起自己(暂停)并在以后恢复的函数。 python中,经典协程式生成器函数构建的,原生协程是由async def定义。 Python中协程通常在事件循环(同一个线程)的监督下载单个线程中运行。 asyncio,Curio,等异步框架为基于协程的非阻塞IO提供了事件循环和支持库。协程支持协作式多任务处理:一个协程必须使用yield或者await关键字显式放弃控制权,另外一个协程才可以并发开展工作。 这意味着,协程中只要有导致阻塞的代码,事件循环和其他所有协程的执行都会受到阻塞。这与进程和线程的抢占式多任务处理形成鲜明对比。 另外,对于同一份作业,协程消耗的资源比线程或者进程少。 ## 队列 一种数据结构,可以放入去除,顺序通常是先入先出。独立的执行单元可以通过队列交换应用数据和信息。队里的实现因底层并发模型而异,标准库中的quene包提供的队列类支持线程,multiprocessing和asyncio的包实现了其他队列类。 ## 锁 一种给执行单元用来同步操作和避免数据损坏的对象。更新共享数据结构时,定钱代码应该持有相关的锁,告诉其他部分等到锁释放后再访问这个数据结构,最简单的锁是互斥锁。锁的实现取决于底层并发模型。 ## 争用 对有限资源的争夺,当多个执行单元尝试访问共享资源的时候,就会发生资源争用,当计算密集型进程或线程必须等待操作系统调度程序为其分配cpu时间时候,还会发生cpu争用。 Last modification:May 30, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 2 如果觉得我的内容对你有用,请随意赞赏
One comment
ano,问您要一下B站头像可以吗,我只有黑白线稿版一直没找到上色版✧。٩(ˊωˋ)و✧*。