Real-time web features require a long-lived mostly-idle connection per user. In a traditional synchronous web server, this implies devoting one thread to each user, which can be very expensive.
原文翻译:
实时WEB应用(Real-time web)的特点是需要与用户建立长连接,在一个传统的同步WEB服务中这意味这为每个用户单独开一个线程,这是很耗能的。
理解场景:
淘宝买东西的时候, 如果没有安装阿里巴巴买家软件, 通过网页也可以与卖家进行沟通, 这就是一个长时间在线的使用场景. 若采用传统的web服务(同步的方式), 那么淘宝的后台服务器就会有一个独立的线程陪着我跟卖家再那里耗着, 直到我关闭网页, 若这个网站同时有很多人连着(耗着), 那服务器的线程和进程都吃不消, 甚至被拖死.
To minimize the cost of concurrent connections, Tornado uses a single-threaded event loop. This means that all application code should aim to be asynchronous and non-blocking because only one operation can be active at a time.
原文翻译:
tornado采用单线程循环机制, 这是为了最小化并发连接开销, 也就是说所有代码都应该是异步和非堵塞的, 因为同一时间只能有一个操作.
理解场景:
假设dell公司在上海有20个客服(24小时接听电话, 专门受理购买了金牌服务的服务器故障问题), 如果dell在上海的客户有10W人,并且平均每个客户平均采购了50台服务器, 那就相当于是500W台服务器在运行了。
某天,在这500W台服务器中有40台(分别是40个人)出现故障了, 如果这20个客服采用sync的方式来受理这些用户的话, 那么过程如下:
1. 了解故障现象, 记录下来.
2. 让顾客配合抓取相关日志信息, 并拍照证实故障信息.
3. 自己将新的固件带到客户服务器故障点.
4. 自己将新的固件替换上去, 然后做故障登记.
5. 回到单位后, 关闭该故障记录.
采用这种方式, 处理这个问题, 至少需要40个人才能同一时间解决问题.
如果采用异步的方式, 那么只要不到5个客服(甚至只要1个客服)就能受理这40个故障单子, 过程如下:
1. 了解故障现象, 记录下来.
2. 让顾客配合抓取相关日志信息, 并拍照证实故障信息.
3. 转角给售后工程师.(到这里客服的工作就基本结束了, 剩下的就是售后工程师来做了)
总结:
异步的优点: 越是单一的事情效率越高
异步的缺点: 职能划分的越单一就越挑战组织管理的能力, 把控不好就会出现乱糟糟的情况.
来源: <http://www.tornadoweb.org/en/stable/guide/async.html>