关于 Benchmark 的几个思考

之前搭建的push layer 需要有一个性能指标,leader 让我做的这个性能测试.其实Go的工具 go-tools 里面是有go test 的,可以测benchmark ,并且是支持Parallel的,非常的方便,不过我想借此机会了解一下benchmark的设计思路和原理,所以自己写了一个.


我测试的目标代码是一个网络io型程序,主要涉及到rpc的调用和redis的查询检索,偏向于网络io,涉及到的部分mqtt协议解包封包用到了一小部分现成的库并不是一个cpu消耗型的程序,逻辑不算复杂.


Benchmark 说起来很简单,就是并发的请求,记录响应时间,求出 qps,也可以很好的想到设计方式,使用单链接,密集发送tcp request.然而过程中还是遇到了一些思路上的问题.


1\   如何设计并发

其实这个还是涉及到什么叫做并发.现代PC几乎都是多道系统,cpu 大多是多核多线程,程序其实是在不停地在用户线程与系统内核线程之间进行切换,系统内核执行操作系统原语,用户线程通过调度类似与系统线程在core上执行.但是这种并发,其实是宏观的,只是说在一短时间内有多少个用户线程被执行了,这个宏观上看起来如同大家都在一起跑,微观上其实是多道分时操作系统划分了cpu时间片分别调度他们执行.golang在引入了gouroutine之后,本来N-1的模型,扩展到了N-M.本来很基础的问题最后成了我设计的测试程序的第一个逻辑错误.

2\qps峰值与压力的关系

实体机(非docker)下测试环境,性能与压力之间其实是一个曲线关系:

<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值