并发拓展--框架并发底层原理(很重要!)
2022/8/4 23:24:29
本文主要是介绍并发拓展--框架并发底层原理(很重要!),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
框架底层并发原理
# 1.django和flask项目的并发量 取决于使用的wsgi框架 (根据前端的请求,开设线程去执行视图函数) 故:项目部署 采用 uwsgi 且 动静分离, 增加项目的并发量 # 2.django和flask都是同步框架 来一个请求,wsgi框架就开启一个线程,执行视图函数 # 3.基于协程的异步框架: asyncio (有了关键字 async和await) sanic,fastapi Tornado, twisted 等 原理:将视图函数 都变成协程函数,同一个线程下,遇到io就会并发执行其他的视图函数 # 只要被async装饰的函数,就是协程函数 @app.route("/") async def test(request): # async 声明该函数为协程函数 await cousor.excute() # await 声明该操作为IO操作,进行并发切换 return json({"hello": "world"}) # 4.协程:单线程下实现并发 人为的 在IO操作的命令位置 标志一下,然后cpu执行到这一步时,就并发切换到其他需要 cpu操作的地方 # 5.一旦用了异步,所有框架都必须使用异步 -pymysql,redis是同步模块 # 不能使用在异步web框架中 -需要使用专门的异步模块 aiomysql,aioredis # python到目前为止,没有一个比较好的异步orm框架 -django 3.0以后支持异步 # 故:没啥用 但 django的orm不支持异步 # 6.aioredis和aiomysql的使用 网上找资料,基本和pymysql/redis 一样,只是IO操作前 需要添加 await # 7.为什么一旦用了异步框架,后面全要用异步? 使用异步框架sanic后, 由于使用了协程,一个线程上就有多个的视图任务 若某个视图任务 没有使用异步框架,而是使用的同步框架(eg: pymysql) 在遇到数据库IO时,释放CPU,当前视图任务就阻塞,那整个线程就阻塞了 就导致后续其他的视图任务,也会跟着阻塞 故:整体执行效率,还不如同步框架+多线程(一个视图任务占一个线程) 只有后续全部采用异步框架(eg:aiomysql)时,一个线程上的多个视图任务,才会真正遇到io 就协程切换 # 8.python的orm框架 -django的orm :同步 -sqlalchemy模块 :同步 -peewee模块 :同步和异步
这篇关于并发拓展--框架并发底层原理(很重要!)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?