tornado这个框架之前用过,但是没深入的看过,今天仔细的看了看,比较了下这种异步非阻塞的模式。
首先是同步异步,阻塞非阻塞的比较:
1.同步和异步:主要关注消息通信机制(重点在B?)。
同步:A调用B,B处理直到获得结果,才返回给A。
异步:A调用B,B直接返回。无需等待结果,B通过状态,通知等来通知A或回调函数来处理。
2.阻塞和非阻塞:主要关注程序等待(重点在A?)。
阻塞:A调用B,A被挂起直到B返回结果给A,A继续执行。
非阻塞:A调用B,A不会被挂起,A可以执行其他操作(但可能A需要轮询检查B是否返回)。
3.同步阻塞:A调用B,A挂起,B处理直到获得结果,返回给A,A继续执行。
4.同步非阻塞:A调用B,A继续执行,B处理直到获得结果,处理的同时A轮询检查B是否返回结果。
5.异步阻塞:异步阻塞 I/O 模型的典型流程 (select)。
6.异步非阻塞:A调用B,B立即返回,A继续执行,B得到结果后通过状态,通知等通知A或回调函数处理。
https://www.jianshu.com/p/ef01c1386933
tornado新版利用gen.coroutine来进行协程相关操作(yield)
@Asynchronous装饰器只是声明函数为可异步,需用callback来调用返回函数