1.1 tornado是什么
tornado 是使用python编写的一个强大的,可以扩展的web服务器 在处理严峻的网络流量的时候,表现出足够的健壮,编写创建的时候足够的轻量级,能够用在大量的应用和工具中 不同于最多只能达到10000个并发连接的传统的网络服务器,tornado设计之初旨在解决c10K问题,是一个非常高性能的框架 它拥有处理安全性,用户验证,社交网络和外部服务(数据库,网站api)进行交互的工具
C10K问题
传统的apache
基于线程的服务器,如apache, 为了传入的连接,维护了一个操作系统的线程池, apache会为每个http连接分配线程池中的同一个线程, 如果所有的线程都处于被占用的状态并且尚有内存可以使用,则生成一个新的线程 不同的操作系统会有不同的设置,大多的系统中默认的线程堆的大小是8mb apache的架构在大负载下变得不可预测, 为每个打开的连接维护一个大的线程池等待数据,会迅速耗光服务器的内存资源
tornado
大多数的设计网络应用都会展示实时更新来提醒新消息,状态变化以及用户通知 要求客户端需要保持一个打开的连接来等待服务器的任何响应, 这些长连接或者推送的请求使得apache的最大线程池迅速饱和 一旦线程池的资源耗尽,服务器将不再响应新的请求 异步服务器在这一场景中的应用相对较新 它们正是被设计来减轻基于线程的服务器的限制的 当负载增加时候,诸如node.js,lighttpd,tornodo这样的服务器使用协作的多任务的方式进行优雅的扩展 如果当前的请求正在等待来自其他资源的数据(数据库查询或者http请求),一个异步服务器可以明确地控制,挂起请求 异步服务器用来恢复暂停的操作的一个常见的模式:当合适的数据准备好时候,调用回调函数