摘要:
[TOC] 队列: from queue import Queue,LifoQueue,PriorityQueue 以上三种队列有什么不同? 1. Queue 与 joinableQueue类似 2. LifoQueue(栈,特点:后进先出) 3. PriorityQueue(具备优先级的队列) 第 阅读全文
摘要:
Event事件 用来同步线程之间的状态。 举个例子: 你把一个任务丢到了子线程中,这个任务将异步执行。如何获取到这个任务的执行状态 解决方法: 1. 如果是拿到执行结果 我们可以采用异步回调, 2. 在这里我们采用另外一种方法来做:Event Event事件 第一阶段:采用轮询方式去获取线程状态 阅读全文
摘要:
同步异步 阻塞:进程遇到IO操作,导致任务无法继续执行其他代码,称为阻塞。 非阻塞:程序在正常运行没有遇到IO操作,或者通过某种方式使程序即时遇到了也不会停在原地,还可以执行其他操作,以提高CPU的占用率 阻塞、非阻塞:指程序的运行状态 并行、并发、串行:处理任务的方式 同步:提交任务后需要在原地等 阅读全文
摘要:
[TOC] 线程池与进程池 池:表示容器。线程池就是存放线程的容器,进程池就是存放进程的容器 为什么要存放到线程池、进程池中 1. 避免频繁的创建和销毁(进程、线程)来的资源开销 2. 可以限制同时存在的线程数量,以保证服务器不会因为资源不足而崩溃 3. 帮我们管理了线程的创建和销毁 4. 管理了任 阅读全文
摘要:
[TOC] GIL 什么是GIL锁 为什么需要加锁 带来的问题 如何解决 关于性能的讨论 计算密集型任务:进程执行更快 线程: 进程: IO密集型:线程执行更快 线程: 进程: 自定义锁与GIL的区别 GIL锁住的是解释器级别的数据,比如对象的引用计数,垃圾分代数据等等,具体参考垃圾回收机制详解 自 阅读全文
摘要:
信号量 它并不能解决安全问题,而是用来限制最大的并发量 阅读全文
摘要:
递归锁 第一种情况:同一个线程一把锁加锁多次,不影响执行 第二种情况:多线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁 总结: 1. 同一个线程对同一把锁加锁多次,不影响执行 2. 同一个线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁 阅读全文
摘要:
死锁 死锁指的是某个资源占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态 产生死锁的情况: 对同一把互斥锁加锁的多次(对同一个) 死锁的另外一种情况: 结果: 阅读全文
摘要:
[TOC] 进程: 生产者,消费者模型 在编程中,模型就是解决某个问题的固定方法或套路 生产者:泛指产生数据的一方 消费者:泛指处理数据的一方 生活案例: 食堂饭店是生产者,负责炒菜 吃饭的人就是消费者,负责吃 1. 要解决什么问题? 2. 解决办法:在生产者和消费者之间加入队列 问题:如果 阅读全文
摘要:
[TOC] 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 注意:进程之间是互相独立的, 阅读全文