学习回顾
线程池
队列:同一进程内的队列
先进先出 后进先出 优先级队列
线程池中的回调函数是谁在调用?
线程池中的回调函数是谁调用的,和父线程没有关系
进程池中的回调函数是父进程调用的,和子进程没有关系
最终目的是为了提高CPU的利用率:
在单进程里为了实现并发,线程就出来了
在单线程里为了实现并发,协程就出来了
并发的本质:切换+保存状态
为什么要有协程?
因为想要在单线程内实现并发的效果。因为cpython有GIL锁,限制了在同一个时间点只能执行一个线程
所以想要在执行一个线程的期间,充分的利用CPU的性能
所以才有想在单线程类实现并发的效果
并发:切换+保存状态
cpu是为什么要切换?
1.因为某个程序阻塞了
2.因某个程序用完了时间片
很明显,解决1这个问题才能提高效率
所以想要实现单线程的并发,就要解决在单线程内,多个任务函数中,某个任务函数遇见IO操作,马上自动切换到其他任务函数去执行
协程:是一个比线程更加轻量级的单位,是组成线程的各个函数,协程本身没有实体。
是单线程下的并发,又称微线程。纤
网络编程---第十三课:yield,控制单线程内切换任务的模块,实现智能化遇到IO就切换,IO多路复用
于 2022-04-14 17:44:55 首次发布
本文探讨了如何利用yield在单线程中实现并发假象,但yield本身无法自动切换到其他函数执行。文章介绍了greenlet模块进行函数切换,以及gevent模块如何在遇到特定IO操作时智能切换,实现协程。同时,对比了串行执行与IO多路复用(如select、poll、epoll)在服务端和客户端的效率差异。
摘要由CSDN通过智能技术生成