请稍等 ...
×

采纳答案成功!

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

关于nginx epoll socket 多线程 和异步io

关于nginx的epoll我有点困惑,就是假如我现在是drf+uwsgi+nginx的环境,这时发起100个接口请求,那么走到nginx应该会有100个socket,这时候epoll会去处理这100个请求,这里继续往下走到uwsgi的时候的,是申请100个线程来处理这100个请求吗?假如是1千1万甚至10万个请求的时候,单台服务器能承受这么高的并发吗?假如我不是使用django,而是使用fastapi这种框架,那么理论上不会申请线程,而是申请协程来处理对吗?这是这两种框架根本的区别吗?
补充一下:记得老师说过django是阻塞框架,丢一个请求过来之后必须处理完才会返回,而fastapi碰到磁盘io会暂时挂起去处理其他请求,等io完成再返回,这个是不是也是两者的不同。
说的很乱,希望老师指导一下。

正在回答 回答被采纳积分+3

1回答

bobby 2022-06-17 15:38:42

你说的大概没有问题,这也就是fastapi这种框架的优势,轻松维护上万的socket连接,实际上nginx也是这种模式,所以nginx轻松支持高并发, 但是uwsgi不是,但是uwsgi不可能不停的开线程,不然系统就挂了,一般uwsgi都会有线程池,用完了后续的连接就排队等到就行了,但是实际上你也应该知道,即使你的fastapi可以快速开上万的连接,但是你的底层数据库也不不可能让你的连接有上万的数据量去全部连接到mysql,mysql驱动也会是连接池,一旦并发过大mysql也会是连接池,所以你上层支持高并发,但是底层一样会受到线程池的影响

0 回复 有任何疑惑可以回复我~
  • 提问者 无限灬 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2022-06-17 17:35:27
  • 提问者 无限灬 #2
    老师你好,我还有一个问题,因为我也买了您tornado的课,我看到里面有一节将说的aiomysql和peewee的内容,虽然我还没看到那里,这里我想问一下,假如是aiomysql的话,可以做到异步数据库连接,从而来增大并发吗?
    回复 有任何疑惑可以回复我~ 2022-06-17 17:38:02
  • bobby 回复 提问者 无限灬 #3
    是的, 如果使用aiomysql当遇到需要请求mysql的时候不会阻塞住, 这样才能和tornado配合使用,但是即使这样aiomysql最好也是使用连接池, 因为1. mysql本身是有连接数限制的 2. 使用连接池省去了建立建立所花的时间
    回复 有任何疑惑可以回复我~ 2022-06-20 09:38:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信