不要盲目迷信多线程

最近闲来无事编写了一个异步redis客户端.为了测试其性能逐对redis和ssdb做了一次性能对比测试.

首先介绍下测试环境,i5 4核心 3.6主频的台式机器,服务器客户断均运行在同一台机器上.

测试内容是1000条hashtable数据,分别有两个属性chianfo和skill,每个属性存放100字节左右的字符串.
使用hmget chaid:xx chainfo skills命令向服务器获取数据.

客户端跟服务器建立单一链接,初始时先提交1000个请求,然后每收到一个答复立刻发起一个新的请求.
也就是说类似一个pingpong测试.

redis的qps非常惊人,达到了45W/,而ssdb只有2.5W/s.

这里先简单介绍下ssdb的处理,首先有一个主线程接受户连接,接收客户端过来的请求,解析出操作之后投递
给reader线程,由reader线程处理请求并将响应返回给客户端.在大概分析了各线程的cpu利用率之后,我对
ssdb的源代码做了一点调整,取消reader线程的工作,将请求直接在主线程中处理并返回响应.

修改之后,ssdb的qps达到了5.2W.后来将这个测试的结果跟ssdb的作者交流了一下,得知新版本的ssdb也会做类似调整.

这里不得不赞一下redis的网络处理部分写得非常高效.redis的主线程cpu消耗不过50%.而我的客户端已经到达了80%.
同样的测试,在修改过后的ssdb上,主线程利用率几乎到达100%(5.2w qps),我的客户端在30%左右.

posted @ 2015-05-08 21:42  sniperHW  阅读(1021)  评论(0编辑  收藏  举报