5

我的问题分为两部分:

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

  2. 在 Tornado 的情况下,“非阻塞”到底是什么意思?这与上面的异步性质有关吗?另外,我在某处读到它总是使用单个线程来处理所有请求,这是否意味着请求是一个接一个地顺序处理还是并行处理?如果是后一种情况,Tornado 是如何做到的?

4

2 回答 2

10
  1. Tornado 使用异步、非阻塞 I/O来解决C10K 问题。这意味着所有 I/O 操作都是事件驱动的,也就是说,它们使用回调和事件通知,而不是等待操作返回。Node.js 和 Nginx 使用类似的模型。例外是tornado.database,它是阻塞的。如果您想详细了解Tornado IOLoop 源代码,则有详细记录。具体示例见下文。

  2. 非阻塞和异步在 Tornado 中可以互换使用,尽管在其他情况下存在差异;这个答案提供了一个很好的概述。Tornado 使用一个线程并按顺序处理请求,尽管速度非常快,因为没有等待 IO。在生产中,您通常会运行多个 Tornado 进程。

至于一个具体的例子,假设你有一个 HTTP 请求,Tornado 必须(异步)获取一些数据并响应,这里(非常粗略地)会发生什么:

  1. Tornado 接收请求并在您的应用程序中调用适当的处理程序方法
  2. 您的处理程序方法使用回调进行异步数据库调用
  3. 数据库调用返回,回调被调用,响应被发送。

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

于 2012-05-11T20:41:55.300 回答
0

这是我对 web.py(cherrypy) 和 tornado 性能的测试。 樱桃是如何工作的?与龙卷风相比,当并发性较低时,它可以很好地处理请求

于 2012-11-23T03:21:12.853 回答