Tornado异步原理
1. 核心思想
Tornado 使用:
- 事件循环(IOLoop)
- 非阻塞 I/O
- 协程(async/await)
- Future
实现单线程高并发,核心逻辑:
请求
↓
执行协程
↓
遇到 I/O(await)
↓
协程挂起,不阻塞线程
↓
IOLoop 处理其他请求
↓
I/O完成
↓
恢复协程继续执行
2. 核心组件
| 组件 | 作用 |
|---|---|
| IOLoop | 事件调度中心 |
| Future | 保存未来结果 |
| async/await | 控制协程暂停和恢复 |
| epoll/kqueue | 监听网络事件 |
3. 示例
1 | import tornado.web |
执行过程:
fetch()
↓
返回Future
↓
await等待
↓
当前请求暂停
↓
其他请求继续处理
↓
HTTP返回
↓
恢复执行
4. 异步优势
适合:
- HTTP接口调用
- WebSocket
- 长连接
- API网关
- 实时推送
原因:
一个线程可以管理大量连接。
5.总结
Tornado 异步 = 事件循环管理 I/O,await挂起协程,I/O完成后恢复执行,用单线程处理大量并发连接。