V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
DuDuDu0o0
V2EX  ›  程序员

gengine 的性能损耗这么大的吗?

  •  
  •   DuDuDu0o0 · 2022-07-12 19:15:36 +08:00 · 1494 次点击
    这是一个创建于 884 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打算在业务内引入 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
    
    
    4 条回复    2022-07-13 17:59:15 +08:00
    chevalier
        1
    chevalier  
       2022-07-13 00:21:23 +08:00
    你的测试场景不太对。

    首先生产环境如果你是高频的执行规则,应该做预加载+池化,gengine 有 pool 池,所以你应该用池化的方式来测试,然后测试时,预加载规则和池化不应该算进 benchmark ,用 StopTimer/StartTimer 略过,只比较执行规则的性能
    DuDuDu0o0
        2
    DuDuDu0o0  
    OP
       2022-07-13 11:55:16 +08:00
    @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 已经很久没人回复了。
    DuDuDu0o0
        3
    DuDuDu0o0  
    OP
       2022-07-13 11:56:47 +08:00
    @DuDuDu0o0
    ”但是基准测试结果和第一版对比相差不大 “
    应为:
    “对比第一版数据,又下降了一个数量级”

    BenchmarkGengine-16 642663 1710 ns/op 592 B/op 13 allocs/op
    BenchmarkGengine-16 52290 23559 ns/op 864 B/op 21 allocs/op
    chevalier
        4
    chevalier  
       2022-07-13 17:59:15 +08:00
    @DuDuDu0o0 这个结果确实有点出乎意料...
    我把你的代码 Pool 的模式改成了 1 顺序模式,然后用 pool.Execute ,达到了跟第一版同一个数量级。

    我觉得你不如直接写在业务代码里面,然后对比一下压测数据,看下对接口 qps 的影响有多少?

    gengine 看起来没人维护了,去年提的 pull request 都没人回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:42 · PVG 20:42 · LAX 04:42 · JFK 07:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.