使用几个经典网络模型实现非阻塞简单http服务,部署在一台4核Xeon 3.00GHZ的机器上进行压力测试。
| 短连接 | 长连接 | 客户端 |
1个线程 | 97%cpu,多核分担 60%cpu网卡中断 1.6w/s 平均响应时间10ms | 100%cpu 15%cpu网卡软中断 2.8w/s 平均响应时间7ms | 100并发/客户端 100w请求/客户端 2个客户端 |
4个线程 | 每个线程70%cpu 99%cpu网卡中断 2.1w/s 平均响应时间9ms | 每个线程100%cpu 40%cpu网卡软中断 6.5w/s 平均响应时间3ms | 100并发/客户端 100w请求/客户端 2个客户端 |
1个leader线程,接受连接 4个worker线程,处理请求 | leader线程90%cpu worker线程40%cpu 75%网卡中断 1.8w/s 平均响应时间10ms | leader线程1%cpu worker线程100%cpu 40%网卡中断 6.0w/s 平均响应时间3ms | 100并发/客户端 100w请求/客户端 2个客户端 |
结论:
1. 短连接中,建立连接是很耗费资源的。
2. 长连接中,多线程在提高处理能力方面是很有价值的,尤其是运算量多的请求。
3. 多个线程同时接受连接会造成cpu软中断的overhead。