龙卷风和异步请求处理

时间:2012-05-11 13:44:41

标签: asynchronous webserver tornado

我的问题分为两部分:

  1. “异步服务器”究竟是什么意思,通常人们称之为Tornado?有人可以提供一个具体的例子来说明概念/定义吗?

  2. 对于龙卷风来说,“非阻塞”究竟是什么意思?这与上面的异步性有关吗?另外,我在某处读它总是使用单个线程来处理所有请求,这是否意味着请求是逐个或并行处理的?如果是后一种情况,龙卷风怎么做呢?

2 个答案:

答案 0 :(得分:10)

  1. 龙卷风使用asynchronous, non-blocking I/O来解决the C10K problem。这意味着所有I / O操作都是事件驱动的,也就是说,它们使用回调和事件通知,而不是等待操作返回。 Node.js和Nginx使用类似的模型。例外是tornado.database,它正在阻止。如果您想详细了解,Tornado IOLoop source有详细记录。有关具体示例,请参见下文。

  2. 非阻塞和异步在Tornado中可以互换使用,尽管在其他情况下存在差异; this answer gives an excellent overview。 Tornado使用一个线程并按顺序处理请求,尽管非常快,因为没有等待IO。在生产中,您通常会运行多个Tornado流程。

  3. 就具体示例而言,假设您有一个HTTP请求,Tornado必须获取一些数据(异步)并响应,这里(非常粗略地)会发生什么:

    1. Tornado接收请求并在您的应用程序中调用适当的处理程序方法
    2. 您的处理程序方法使用回调
    3. 进行异步数据库调用
    4. 调用数据库调用,调用回调,并发送响应。
    5. Tornado(与Django相比)的不同之处在于,在第2步和第3步之间,该过程可以继续处理其他请求。 Tornado IOLoop只是保持连接打开并继续处理其回调队列,而使用Django(和任何同步Web框架),线程将挂起,等待数据库返回。

答案 1 :(得分:0)

这是我对web.py(cherrypy)和龙卷风表现的测试。 how is cherrypy working? it handls requests well compared with tornado when concurrence is low

相关问题