版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
学习回顾
线程池
队列:同一进程内的队列
先进先出 后进先出 优先级队列
线程池中的回调函数是谁在调用?
线程池中的回调函数是谁调用的,和父线程没有关系
进程池中的回调函数是父进程调用的,和子进程没有关系
最终目的是为了提高CPU的利用率:
在单进程里为了实现并发,线程就出来了
在单线程里为了实现并发,协程就出来了
并发的本质:切换+保存状态
为什么要有协程?
因为想要在单线程内实现并发的效果。因为cpython有GIL锁,限制了在同一个时间点只能执行一个线程
所以想要在执行一个线程的期间,充分的利用CPU的性能
所以才有想在单线程类实现并发的效果
并发:切换+保存状态
cpu是为什么要切换?
1.因为某个程序阻塞了
2.因某个程序用完了时间片
很明显,解决1这个问题才能提高效率
所以想要实现单线程的并发,就要解决在单线程内,多个任务函数中,某个任务函数遇见IO操作,马上自动切换到其他任务函数去执行
协程:是一个比线程更加轻量级的单位,是组成线程的各个函数,协程本身没有实体。
是单线程下的并发,又称微线程。纤程。
一句话:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的
greenlet:能简单的实现函数与函数之间的切换,但是遇到IO操作,不能自动的切换到其他函数中
(1)注册一下函数,将函数注册成一个对象f1
f1 = geenlet(func)
(2)调用func,使用f1.switch(),如果func需要传参,就在switch这里传即可
gevent模块:可以实现在某函数内部遇到IO操作,将自动的切换到其他函数内部去执行
g = gevent.spawn(func,参数)注册一下函数func,返回一个对象g
gevent.j