并发编程之协程
目录 协程 什么是协程 线程出现的问题 使用协程的好处 符合什么条件就能称之为协程: 协程的使用场景 Python中对于协程有两个模块,greenlet和gevent。 Greenlet(greenlet的执行顺序需要我们手动控制) gevent(自动切换,由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库,这一过程在启动时通过monkey patch完成) 协程 什么是协程 在 单个线程下 实现并发效果,在多个任务之间切换。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置,当程序中存在大量不需要CPU的操作时(IO),适用于协程。 官方说法:协程称为微线程,就是操作系统级别的线程。是由操作系统来控制调度的。 线程出现的问题 GIL锁 导致多线程无法并行执行,只能并发执行,效率低。但是并发时我们要实现的最终目的(最好并行) 线程出现假死状态 例如tcp服务器,限制了最大线程数量1000,如果第1000个客户有一部分,没有进行任何的操作,而新任务将无法被处理,即使CPU空闲 使用协程的好处 协程有极高的执行效率,因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销 不需要多线程的锁机制,因为只有一个线程 ,不存在同时写变量冲突,在协程中控制共享资源不加锁