摘要:
一、协程简介、引子 ''' 协程:异步IO,队列,缓存 Nginx效率高就是用了异步IO 协程是一种用户态的轻量级线程。又称微线程,怎么理解呢?后面会说 CPU只认识线程,不会像线程一样吧上下文保存在CPU寄存器,协程是用户控制的。 协程能保留上一次调用时的状态,单线程下实现并发效果 协程的好处: 阅读全文
摘要:
一、协程简介、引子 ''' 协程:异步IO,队列,缓存 Nginx效率高就是用了异步IO 协程是一种用户态的轻量级线程。又称微线程,怎么理解呢?后面会说 CPU只认识线程,不会像线程一样吧上下文保存在CPU寄存器,协程是用户控制的。 协程能保留上一次调用时的状态,单线程下实现并发效果 协程的好处: 阅读全文
摘要:
''' 进程池,启动一个进程就要克隆一份数据,假设父进程1G,那么启动进程开销很大 避免启动太多造成系统瘫痪,就有进程池,即同一时间允许的进程数量 ps:线程没有池,因为线程启动开销小,线程有类似信号量来控制 ''' ''' windows上必须加语句: if __name__ == '__main 阅读全文
摘要:
1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯: Queue,用法跟线程里的Queue一样,put,get 线程queue没有做序列化,进程queue做序列化了 父进程的queue怎么传给子进程的?父进程的queue克隆了一份到子进程 按理说两个queue没关 阅读全文
摘要:
''' 多线程使用场景: 怎样用Python的多线程提高效率? io操作不占用CPU 计算操作占用CPU Python多线程不适合CPU操作密集型的任务,适合io操作密集型的任务 如果有CPU操作密集型的任务需要用多进程,启动八个进程每个进程里一个线程,一共八个线程 在八核上运行,可以利用八核了,唯 阅读全文
摘要:
''' queue队列,什么是队列?排队干一件事,谁去维护排队的关系?预防插队等 队列是一个有顺序的容器,有列表了还要队列干什么。 根本区别是列表里拿走一个数据,数据还在里面。队列是数据取走了就没了 为什么要用队列?提高双方效率,解耦合,生产者向队列里放,(队列),消费者从队列里取 1、先入先出 q 阅读全文
摘要:
''' 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行 红绿灯线程和车的线程会相互依赖 这种场景怎么实现? 事件 切换一次灯就是一次事件,这次事件的变化造成其他状态的变化 事件是用于线程之间的数据同步的。事件变化其他线程相应作出变化 应 阅读全文
摘要:
递归锁: ''' 递归锁: 需求:有多道门,同时只允许一个线程进门 如果用之前的锁,进来的时候进来了,出去的时候找不到对应的锁 下面的程序中,锁的形象表示: { run3 { run1 } { run2 } } 说明:这里有三把锁,如果用的是普通锁,进到run1里面就出不来了。因为找不到哪一把钥匙 阅读全文
摘要:
既然有了GIL锁,CPython还要多线程干什么? ''' GIL:全局解释器锁的来历 四核:同一时刻真正有四个任务在运行,多核的意义在于此 单核:看上去是并发的,因为进行了上下文切换,单核永远是串行的,并发是假象 CPython中不论有多少核,只有一个核心的CPU资源被使用,因为同一时间只有一个线 阅读全文
摘要:
''' 一个主线程可以启动几个守护线程,为主线程服务 守护线程为主线程服务,主线程退出,守护线程也自动强制跟着退出,不会执行完。 之前的线程是用join等执行完了主线程才往下走,例如:其他线程对公共变量做累加 如果不加join,主线程直接跑完了,跑完的时候打印公共变量结果,但此时程序还没结束,公共变 阅读全文
|