C10K问题的由来:
出处链接:https://www.jianshu.com/p/ba7fa25d3590
随着互联网的普及,应用的用户群体几何倍增长,此时服务器性能问题就出现。最初的服务器是基于进程/线程模型。新到来一个TCP连接,就需要分配一个进程。假如有C10K,就需要创建1W个进程,可想而知单机是无法承受的。那么如何突破单机性能是高性能网络编程必须要面对的问题,进而这些局限和问题就统称为C10K问题,最早是由Dan Kegel进行归纳和总结的,并且他也系统的分析和提出解决方案。
C10K问题的本质:
C10K问题的本质上是操作系统的问题。对于Web 1.0/2.0时代的操作系统,传统的同步阻塞I/O模型处理方式都是requests per second。当创建的进程或线程多了,数据拷贝频繁(缓存I/O、内核将数据拷贝到用户进程空间、阻塞,进程/线程上下文切换消耗大, 导致操作系统崩溃,这就是C10K问题的本质。
可见, 解决C10K问题的关键就是尽可能减少这些CPU资源消耗。
解决思路:
- 每个连接分配一个独立的线程/进程
- 同一个线程/进程同时处理多个连接
以上是对于,C10K问题的简答描述便于理解。
现在介绍tornado框架:
区别于我们熟悉的django框架,Django是走大而全的方向,注重的是高效开发,它最出名的是其全自动化的管理后台。Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的设计方式。
tornado主要是对于django框架难以应付下面的应用场景:
用户量大,高并发
大量的HTTP持久连接
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架。
作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。能够支撑处理大于或等于一万的并发。
浙公网安备 33010602011771号