/ NOTES

《C10K到C10M》

C10K 到 C10M

C10K 问题最早由 Dan Kegel 在 1999 年提出。其中 “C” 是 Client 的缩写,C10K 就是 Web 服务器同时处理 1 万个请求的问题。同理,C100K 就是同时处理 10 万个请求的问题,C10M 是同时处理 1000 万个请求的问题。

为什么 C10K 是一个问题

对于现在来说,C10K 当然不是什么问题,但问题中所给出的服务器是:当时花 1200 美元左右购买一台 1000MHz 的机器,它有 2GB 的 RAM 和一个 1000Mbit/sec 的以太网卡。还只是 32 位系统,运行着 Linux 2.2 版本。

即使有 20000 个客户端,每个客户端占用 100Kbytes 的内存以及 50Kbits/sec 的网络带宽,这个物理资源也足够了,所以瓶颈并不在硬件。

在当时,Linux 中网络处理都用同步阻塞的方式,也就是每个请求都分配一个进程或者线程。而 10000 个进程或线程的调度、上下文切换、它们占用的内存,都会成为瓶颈。

解决方案

既然无法为每个客户端请求分配一个线程,所以假如可以在一个线程内处理多个请求,就可以解决问题。

也就是基于 I/O 多路复用和请求处理的优化。

(未完…)