进程:
是操作系统的发展过程中,为了提高cpu的利用率,在操作系统同时运行多个程序的时候,为了数据的安全代码不混乱而被创造出来的一个概念
每一个程序运行起来都至少是一个进程
进程是计算机中最小的资源分配单位
进程被操作系统调度的,有很多相关的算法----早期的操作系统
进程之间是数据隔离的
进程的三状态 就绪 运行 阻塞
同步异步
同步:
一个任务执行依赖另一个事物的结束
#列子 join lock
异步:
一个任务的执行不依赖另一个事物的结束
#列子 start terminate
阻塞非阻塞:
阻塞: accept recv recvfrom queue.get join4
非阻塞:setblocking = False
异步非阻塞最好
并行:
并行是特殊的并发
并行就是同一时刻两个以上的程序同时在cpu上执行
并发
并发就是,同一时段两个以上的程序看起来在同时执行
IO概念: 文件操作 数据库操作 网络传输,用户输入输出
input:得到的是bytes/str就是input
Output:发送数据/输出数据
因为进程与进程之间本质上是异步且数据隔离
守护进程:
守护进程是一个子进程
守护进程会在主进程代码结束之后才结束
为什么会这样?
由于主进程必须要回收所有的子进程的资源
所以主进程必须在子进程结束之后才能结束
而守护进程就是为了守护主进程存在的
不能守护到主进程结束,就只能退而求其次,守护到代码结束了
守护到主进程的代码结束,意味着如果有其他子进程没有结束,守护进程无法继续守护
解决方案 : 在主进程中加入对其他子进程的join操作,来保证守护进程可以守护所有主进程和子进程的执行
如何设置守护进程
子进程对象.daemon = True 这句话写在start之前
同步控制:
join
锁-互斥锁: 多个进程同时对一个数进行操作的时候,操作同一个文件/数据库/管道
信号量
事件
数据共享----数据不安全
manager
IPC----进程之间的通信
管道
队列---生产者消费者模型(为了解决数据的生产和处理的效率问题)
第三方工具(消息队列,消费中间件)
进程池
解决大量任务开启多个进程的开销过大的问题
节省资源,提高并发效率的
一般开数据