你好,我是盛延敏,这里是网络编程实战第24讲,欢迎回来。 在性能篇的前4讲里,我们陆续讲解了select、poll、epoll等几种I/O多路复用技术,以及非阻塞I/O模型,为高性能网络编程提供了必要的知识储备。这一讲里,我们了解一下历史上有名的C10K问题,并借着C10K问题系统地梳理一下高性能网络编程的方法论。 ## C10K问题 随着互联网的蓬勃发展,一个非常重要的问题摆在计算机工业界面前。这个问题就是如何使用最低的成本满足高性能和高并发的需求。这个问题在过去可能不是一个严重的问题,但是在2000年前后,互联网用户的人数井喷,如果说之前单机服务的用户数量还保持在一个比较低的水平,比如说只有上百个用户,那么在互联网逐渐普及的情况下,服务于成千上万个用户就将是非常普遍的情形,在这种情形下,如果还按照之前单机的玩法,成本就将超过人们想象,只有超级有钱的大玩家才可以继续下去。 于是,C10K问题应运而生。C10K问题是这样的:如何在一台物理机上同时服务10000个用户?这里C表示并发,10K等于10000。得益于操作系统、编程语言的发展,在现在的条件下,普通用户使用Java Netty、Libevent等框架或库就可以轻轻松松写出支持并发超过10000的服务器端程序,甚至于经过优化之后可以达到十万,乃至百万的并发,但在二十年前,突破C10K问题可费了不少的心思,是一个了不起的突破。 C10K问题是由一个叫Dan Kegel的工程师提出并总结归纳的,你可以通过访问[http://www.kegel.com/c10k.html](http://