码迷,mamicode.com
首页 > 编程语言 > 详细

Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4.3.2.死锁 4.3.3.可重入锁 4.3.4.信号量

时间:2019-06-04 16:14:37      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:换问题   生产者消费者   安全   队列   作用   顺序   指定   子进程   一个   

复习
1.守护进程
2.互斥锁(解决数据错乱的方法)
3.IPC(进程间通讯)
4.生产者与消费者模型

详解:
1.守护进程
一个进程可以设为另一个进程的守护进程
特点:被守护的进程结束时,守护进程也会随之结束
本质:父进程交给子进程一个任务,然而父进程 先于子进程结束了,子进程的任务也就没有必要 继续执行了
格式:开始前加 p.daemon=True

2.互斥锁(解决数据错乱的方法)
方法一:互斥锁
互斥 互相排斥
锁的本质:一个标志
标志的两个状态:
1.锁定
2.未锁定
什么时候用?
当多个进程要操作同一个资源时,就会造成数据错乱,通常将1.写入操作加锁 2.读取操作不需加
锁的作用:(优缺点)
(缺点:)加锁会把原本并发的任务,修改为串行,降低了效率 (优点:)保证了数据的安全性,锁可以指定一部分代码串行,其他仍然并发
重点考虑问题:加锁的位置
注意:
1.要保证安全必须保证大家用的是同一把锁
2.不能对一把锁连续执行acquire,将会导致死锁
方法二:
join
本质:
1.join也可以将任务变为串行
2.join固定任务的执行顺序
3.join会使得子进程的代码全部串行,并且主进程也会阻塞住

3.IPC
进程间通讯:
1.管道(subprocess)
单向通讯,传输的是二进制
2.共享文件(with open()as f)
数据量几乎不受限制,但是速度慢
3.共享内存(1.Manager2.Queue)
数据量较小 但是速度快
4. socket("服务器","客户端")
编程复杂 ,传输的是二进制

最主要的内容就是共享内存:
1.Manager()类 了解
2.Queue队列 (q=Queue()) 必须掌握的方法
是一种数据容器,
特点:先进先出,并且进程中的队列 可以共享数据,自带锁机制

4.生产者消费者模型
要解决的问题:生产者与消费者能力不平衡,导致效率低
如何解决?
1.把生产者和消费者分开耦合,即把任务分到不同进程中 各司其职
2.分开后,由于进程间相互隔离,所以需要一个共享容器,Queue 闪亮登场
(1.解决了数据交换问题2.锁的问题)


今日内容
1.joinablequeue
2.线程理论
3.多线程对比多进程
4.线程的使用方式
--1.产生 线程的两种方式
--2.守护线程
--3.线程安全问题
----1.互斥锁
----2.死锁
----3.可重入锁
----4.信号量




Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4.3.2.死锁 4.3.3.可重入锁 4.3.4.信号量

标签:换问题   生产者消费者   安全   队列   作用   顺序   指定   子进程   一个   

原文地址:https://www.cnblogs.com/llx--20190411/p/10974050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!