请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

uWSGI启动Django Flask的原理

图片描述
老师你好,这节课对我的触动是比较大的,因为在你Django框架的课程中好像没这么详细的去介绍uWSGI WSGI这种概念性的知识,听完这节课,我这么理解吧,Django 和Flask 这两种框架其实就是一种同步程序,他不能自己主动 运行,uWSGI是服务器,它应该是为了用户并发而诞生的,假如有10个用户同时访问了网站,Nginx做端口转发给uWSGI服务器,uWSGI就会启动10个Django线程来处理用户的请求,是这个意思吧。如果是这样子的话,Django和Flask对于高并发应该相当吃力。
再说说Torado,因为我写过js,有太多太多的回调函数了,写的头疼,我这样理解,因为是异步的,我就暂且理解为单线程,Torado把所有的用户请求,都放在一个队列里,我把读取数据库当做是io密集型,哪个先处理完,那么哪个先返回,这样的话效率就非常高,这还只是单线程,如果多开几个线程,或者进程那么处理的并发数量就会非常大,但是有一点我没有想明白,为什么遇到cpu密集型的处理的会卡住

正在回答

1回答

  1. 之前的django课程因为考虑很多是初学者所以没有讲解这个原理部分

  2. 你的uwsgi理解是正确的,虽然django和flask都可以不用配合自己运行起来并访问,因为因为flask和django内部都自己非常简单的实现了Uwsgi协议的接口,但是实际生产环境不会使用django和flask自带的,因为无并发可言

  3. uwsgi你的理解是正确的,实际上uwsgi和java中的tomcat是一样的地位和逻辑,不过uwsgi不是启动10个线程而已,uwsgi启动的十个进程,每个进程会启动多个线程。如果只启动10个线程的话那么就只能使用1个cpu了,所以uwsgi是启动多个进程,每个进程启动多个线程

  4. 虽然uwsgi这种模式并发比不上tornado这种,但是你要知道apache也是这种逻辑的,apache可是不少大项目再用,所以这种模式是能抗住并发的,关键在于你的数据库优化到位没有,每个url的业务逻辑的执行时间是否足够短

  5. tornado的理解也是正确的,而且你也提到了遇到cpu密集型怎么办? 答案就是-没办法,cpu密集型的asyncio解决不了,因为asyncio不是用来解决cpu密集型的,python的协程不行,java的也不行,包括go的也不行, cpu密集型的最大的方法就是利用多核,并且买性能优越的显卡,或者专门针对计算密集型的芯片来完成,多线程无法提高cpu密集型的运算速度,反而会因为切换线程导致性能还不如单线程

0 回复 有任何疑惑可以回复我~
  • 提问者 WittChen #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-08-26 19:41:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信