打算在业务内引入 gengine 作为热加载的业务逻辑判断&拦截,
测了下 gengine 的性能,感觉差得有点无法接受,如果我写的 benchmark 测试有问题,欢迎大佬指出
代码: https://gist.github.com/Jun10ng/cb3aad0f7191ed04c3b00ccfef889bc2
结果:以下是和 go 本身的逻辑对比。
goos: darwin
goarch: amd64
pkg: ruleng
cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
BenchmarkGo-16 607888363 2.233 ns/op 0 B/op 0 allocs/op
BenchmarkGengine-16 642663 1710 ns/op 592 B/op 13 allocs/op
1
chevalier 2022-07-13 00:21:23 +08:00
你的测试场景不太对。
首先生产环境如果你是高频的执行规则,应该做预加载+池化,gengine 有 pool 池,所以你应该用池化的方式来测试,然后测试时,预加载规则和池化不应该算进 benchmark ,用 StopTimer/StartTimer 略过,只比较执行规则的性能 |
2
DuDuDu0o0 OP @chevalier thank for your reply.
我写了 v2 版本的基准测试,使用了细化规则粒度并且并发执行,池化,用 ResetTimer 忽略了规则预加载和池化的时间,但是基准测试结果和第一版对比相差不大。如果我哪里使用方式不对,麻烦您斧正下。感谢。 v2 测试代码: https://gist.github.com/Jun10ng/b7be36c97d092ed5a7f4d1b2e5d608e1 基准结果: BenchmarkGo-16 527925068 2.095 ns/op 0 B/op 0 allocs/op BenchmarkGengine-16 52290 23559 ns/op 864 B/op 21 allocs/op by the way:我本来想去 github 社区里提问的,但是看 billbill/gengine 已经很久没人回复了。 |