Tornado在单线程运行时是非阻塞的吗?

3

Tornado是一种非阻塞的Web服务器。

然而,所有操作都在单个线程中运行。 如果由单个线程处理,它如何保持非阻塞状态?

如果有一个长时间的操作,会阻塞新请求吗?

从Tornado下载大文件是一个长时间的阻塞过程吗?

如果我的理解有误,请指出并纠正。

非常感谢。

1个回答

2
如果进行长时间操作,它会阻塞新的请求吗?
是的。不是的。这取决于情况。
在Tornado本身中发生的任何事情都会被阻塞。因此,如果您使用“time.sleep(10)”或进行计算密集型操作,则会被阻塞。
Tornado(和Twisted和node.js)能够很好地从另一个服务(如Amazon、Facebook、子进程或具有异步库的数据库)请求数据,然后在等待回复时为其他请求提供服务。请参见 http://www.tornadoweb.org/documentation/overview.html#non-blocking-asynchronous-requests 要做到这一点,您需要在前面的服务器也是异步的(因此是Nginx,而不是Apache)。

非常感谢,这意味着即使操作不共享相同的对象/内容,它也不是天真的非阻塞。我是对的吗? - MobileDev
我不完全确定你在说什么,但是如果你简单地在同步代码上加上“async”包装器,它会阻塞。 Tornado异步的主要优点是您无需在等待IO时阻塞。 如果Tornado有很多处理工作要做,您将会被阻塞。 - wisty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接