现在的服务器支撑上百万个并发 TCP 连接已经不是新闻,实现 C1000k 的常规做法是调整内核参数,提高文件数,降低每个连接的内存消耗。在用户态运行 TCP/IP 协议栈意味着并发 TCP 连接不再占用系统文件数,只占内存,解决了 C1000k 的一大瓶颈,内核只要提供一个收发网络 packet 的接口就行。内核的网络协议栈强调通用性,主要是为吞吐量优化(性能指标通常是 MB/s 或 packets per second),顺带兼顾大量并发连接。为支持 C10k,要调整内核参数让每个连接少占资源,这与内核代码的设计初衷是违背的。用户态协议栈,可以根据应用的特点来剪裁协议栈功能。优化也更直接,不再是调黑盒参数组合,而是直接上 profiling,根据结果修改应用程序和协议栈的代码。用户态协议栈的吞吐量比不上内核,不过对 C1000k 的应用场合(例如 comet)应该不成问题。