Tornado异步原理

1. 核心思想

Tornado 使用:

  • 事件循环(IOLoop)
  • 非阻塞 I/O
  • 协程(async/await)
  • Future

实现单线程高并发,核心逻辑:

请求
 ↓
执行协程
 ↓
遇到 I/O(await)
 ↓
协程挂起,不阻塞线程
 ↓
IOLoop 处理其他请求
 ↓
I/O完成
 ↓
恢复协程继续执行

2. 核心组件

组件 作用
IOLoop 事件调度中心
Future 保存未来结果
async/await 控制协程暂停和恢复
epoll/kqueue 监听网络事件

3. 示例

1
2
3
4
5
6
7
8
9
import tornado.web
from tornado.httpclient import AsyncHTTPClient
class MainHandler(tornado.web.RequestHandler):
async def get(self):
client = AsyncHTTPClient()
response = await client.fetch(
"https://example.com"
)
self.write(response.body)

执行过程:

fetch()
 ↓
返回Future
 ↓
await等待
 ↓
当前请求暂停
 ↓
其他请求继续处理
 ↓
HTTP返回
 ↓
恢复执行

4. 异步优势

适合:

  • HTTP接口调用
  • WebSocket
  • 长连接
  • API网关
  • 实时推送

原因:
一个线程可以管理大量连接。


5.总结

Tornado 异步 = 事件循环管理 I/O,await挂起协程,I/O完成后恢复执行,用单线程处理大量并发连接。