tornado工作原理

Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架:

  • 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
  • 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。

Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发,其工作原理如下:

1.ioloop是tornado运行的核心
2.ioloop封装了操作管理epoll的工作,是Tornado不依靠多进程/多线程而达到高性能的原因
3.当ioloop实例启动时,ioloop将服务器监听到的socket添加到epoll容器中,然后循环等待epoll返回可处理的socket
4.当客户端发起连接后,ioloop从epoll容器中拿到了服务器监听的socket,并调用服务器实例处理该监听socket的方法,接收连接请求,并将新的客户端对应的socket添加到epoll容器中,然后继续循环等待epoll返回可处理的socket
5.当客户端发送过来请求数据后,ioloop从epoll中拿到了接收数据的socket,并调用服务器实例处理该传输socket的方法,从socket中读取出http报文数据,解析后调用Application的实例,进行路由分发,实例化具体的RequestHandler,执行其中的具体http方法,生成响应数据并打包成http报文写入到缓冲区中。
6.当与客户端对应的socket可写时,ioloop从epoll中拿到了对应可写的socket,将缓冲区中对应的响应报文数据写入到socket中传回给客户端,完成请求处理。
7.epoll每次只返回给ioloop可以处理的socket,然后ioloop对拿到的socket依次进行处理,有效充分地利用了cpu时间,进而达到提升支持高并发的能力
对于多个可处理的socket,也是一个一个去按照上述流程去依次处理(单进程单线程)

附ioloop工作原理图:

 

posted @ 2020-12-24 16:38  eliwang  阅读(660)  评论(0编辑  收藏  举报