关于nginx epoll socket 多线程 和异步io
来源:13-1 事件循环-1

无限灬
2022-06-15
关于nginx的epoll我有点困惑,就是假如我现在是drf+uwsgi+nginx的环境,这时发起100个接口请求,那么走到nginx应该会有100个socket,这时候epoll会去处理这100个请求,这里继续往下走到uwsgi的时候的,是申请100个线程来处理这100个请求吗?假如是1千1万甚至10万个请求的时候,单台服务器能承受这么高的并发吗?假如我不是使用django,而是使用fastapi这种框架,那么理论上不会申请线程,而是申请协程来处理对吗?这是这两种框架根本的区别吗?
补充一下:记得老师说过django是阻塞框架,丢一个请求过来之后必须处理完才会返回,而fastapi碰到磁盘io会暂时挂起去处理其他请求,等io完成再返回,这个是不是也是两者的不同。
说的很乱,希望老师指导一下。
写回答
1回答
-
bobby
2022-06-17
你说的大概没有问题,这也就是fastapi这种框架的优势,轻松维护上万的socket连接,实际上nginx也是这种模式,所以nginx轻松支持高并发, 但是uwsgi不是,但是uwsgi不可能不停的开线程,不然系统就挂了,一般uwsgi都会有线程池,用完了后续的连接就排队等到就行了,但是实际上你也应该知道,即使你的fastapi可以快速开上万的连接,但是你的底层数据库也不不可能让你的连接有上万的数据量去全部连接到mysql,mysql驱动也会是连接池,一旦并发过大mysql也会是连接池,所以你上层支持高并发,但是底层一样会受到线程池的影响
042022-06-20
相似问题