Process 类
并发 / 并行
并发: 同一时间段内 多个任务交替使用同一个CPU
并行: 同一时刻 多个任务在不同的CPU上同时运行
同步/异步
同步:调一个任务,等待这个任务返回结果,才能继续执行其他代码
异步:调一个任务,不等待这个任务 ,
阻塞/非阻塞
阻塞:在当前这个任务中 CPU不工作 空闲
非阻塞:CPU工作 为当前程序提供服务
Start 异步非阻塞
Terminate 异步非阻塞
Join 同步阻塞
Join(限定等待时间)
是Process模块提供给我们的 对子进程同步管理的方法
开启进程Process类
实例化 的时候引用的参数: target = 函数名,args=(fruit,)
方法: start 开启进程 terminate 结束进程 join 等在子进程结束
属性:
Name 进程名 pid进程id
Daemon 一定要在start之前设置 设置一个子进程为守护进程,守护进程在主进程的代码结束之后结束
用类的方式开启子进程:
IO操作
I input 输入 输入到内存
O output 输出 从内存往外(网络 硬盘 数据库等)输出
锁
队列
多个进程之间的数据是隔离的
进程之间的数据交互是可以通过网络/文件来实现的
Socket来实现的
也叫IPC-->inter process communication 进程之间的通信
通过python的模块实现的
基于原生socket
基于进程队列的 *****
通过第三方软件/工具来实现: 基于网络
自己写的代码少 新能好 但是需要安装
消息中间:件
生产者 消费者模型:
获得数据:生产者
处理数据:消费者
调节生产者的个数或者消费者的个数来让程序的效率达到最平衡和最大化
解耦的思想
Producer 生产者
Consumer 消费者
供大于求
锁 同一时刻同一段代码,只能有一个进程来执行过这段代码
保证数据安全
多进程中,只有去操作一些进程之间可以共享的数据资源的时候才需要进行加锁
Lock = lock()
Acquire release
With lock:
Lock 互斥锁
ipc
队列
Put
Get
生产者 消费者模型
基于队列把生产者和消费者的过程分开
补充:
队列 是进程安全的
队列 自带了锁 每次都带lock
基于什么实现的
基于文件家族的socket 通信完成的
上面服务实现ipc机制不止队列一个,管道pipe
队列 == 管道+锁
管道 是基于文件家族的socket服务实现的
纯概念:
锁: lock lock.acquire() 获取锁
Lock.release() 释放锁
锁的应用场景: 当多个进程需要操作同一个文件
队列: 进程之间的通信