# 线程 # 守护线程 # 在主线程结束(包括所有的子线程)之后守护线程才结束 # 面向对象开启线程 # 原本写在func中的代码挪到run方法中 # 同步的机制 # 锁 # GIL锁 是全局解释器锁 线程没有并行 # 是Cpython解释器的 # 在开发python解释器的时候可以减少很多细粒度的锁 # 为什么有了GIL锁还会产生数据安全问题呢? # 因为GIL锁得是线程 而不是具体的内存 # 互斥锁 不能连续acquire两次 # 递归锁 可以在用一个线程/进程中被acquire多次 # 死锁 : 是一种现象,而不是一个工具 # 为什么产生死锁 : 代码的逻辑有问题 # 如何解决死锁 : # 如果在服务阶段 -> 递归锁 ->排查逻辑 -> 互斥锁 # 如果在测试阶段 -> ->排查逻辑 -> 互斥锁 # 信号量 锁+计数器 # 和池的区别 : 信号量是有几个任务起几个进程/线程 池是固定的线程/进程数,不限量的任务 # 现象 : 信号量慢 且耗资源 池快 # 事件 Event wait set clear is_set # 条件 condition wait notify acquire release # 定时器 Timer # join 同步控制 用来获取结果 # 锁 数据安全 # 池 提高效率,解决并发