Asynchronous Tornado和异步请求处理

Asynchronous Tornado和异步请求处理,asynchronous,webserver,tornado,Asynchronous,Webserver,Tornado,我的问题分为两部分: “异步服务器”通常被人们称为龙卷风,它到底意味着什么?有人能提供一个具体的例子来说明这个概念/定义吗 在龙卷风的情况下,“不阻塞”到底意味着什么?这与上面的异步特性有关吗?另外,我在某个地方读到过,它总是使用一个线程来处理所有请求,这意味着请求是按顺序逐个处理还是并行处理?如果是后一种情况,龙卷风是如何做到的 龙卷风用来解决这个问题。这意味着所有I/O操作都是事件驱动的,也就是说,它们使用回调和事件通知,而不是等待操作返回。Node.js和Nginx使用类似的模型。例外情况

我的问题分为两部分:

  • “异步服务器”通常被人们称为龙卷风,它到底意味着什么?有人能提供一个具体的例子来说明这个概念/定义吗

  • 在龙卷风的情况下,“不阻塞”到底意味着什么?这与上面的异步特性有关吗?另外,我在某个地方读到过,它总是使用一个线程来处理所有请求,这意味着请求是按顺序逐个处理还是并行处理?如果是后一种情况,龙卷风是如何做到的

  • 龙卷风用来解决这个问题。这意味着所有I/O操作都是事件驱动的,也就是说,它们使用回调和事件通知,而不是等待操作返回。Node.js和Nginx使用类似的模型。例外情况是
    tornado.database
    ,它正在阻塞。如果您想详细查看,则可以很好地记录。有关具体示例,请参见下文

  • 非阻塞和异步在Tornado中互换使用,尽管在其他情况下存在差异。Tornado使用一个线程并按顺序处理请求,尽管速度非常快,因为不需要等待IO。在生产中,您通常会运行多个Tornado流程

  • 作为一个具体的例子,假设您有一个HTTP请求,Tornado必须获取一些数据(异步)并响应该请求,下面(非常粗略地)给出了发生的情况:

  • Tornado接收请求并在应用程序中调用适当的处理程序方法
  • 处理程序方法通过回调进行异步数据库调用
  • 数据库调用返回,调用回调,并发送响应

  • Tornado(与Django相比)的不同之处在于,在第2步和第3步之间,流程可以继续处理其他请求。Tornado IOLoop只是保持连接打开并继续处理其回调队列,而对于Django(和任何同步web框架),线程将挂起,等待数据库返回

    这是我对web.py(cherrypy)和tornado性能的测试。

    写得好的答案。当您说“事件通知”时,您是指生成的事件,以表示I/O操作已完成,以便调用回调?还有其他类型的活动吗?谢谢是的,我的意思是Tornado通过epoll或kqueue(即边缘驱动的更改通知)收到传入数据的通知。