V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
PiersSoCool
V2EX  ›  问与答

Golang Json 并发解析怎么做才最好?

  •  
  •   PiersSoCool · 2020-08-24 16:46:35 +08:00 · 1406 次点击
    这是一个创建于 1333 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想问一下 golang 的协程开销到底会不会很大?

    比如我开了 1W 个 go routine 并发解析 json,会不会比 for 循环连续解析 1W 个更慢,因为协程虽然轻量,但是创建还是需要时间和内存?

    那如果是 10W 、100W 甚至更多呢?

    或者说,这种情况下怎么做最合适?

    5 条回复    2020-08-25 10:17:36 +08:00
    maemual
        1
    maemual  
       2020-08-24 16:48:48 +08:00
    解析 JSON 吃 CPU,你到 CPU 核数基本就能吃满主机 CPU 了,再往上加就白白增加 goroutine 的调度成本了吧
    PiersSoCool
        2
    PiersSoCool  
    OP
       2020-08-24 20:00:20 +08:00
    @maemual 所以说还是有个度,超过这个度 goroutine 是低效的。
    linvon
        3
    linvon  
       2020-08-24 21:04:09 +08:00
    你的 json 来源呢?如果是从网络或者文件读取那 goroutine 肯定效率提升很大啊。但如果都在内存里,那完全就是 CPU 密集操作,你开 goroutine 就是负优化
    PiersSoCool
        4
    PiersSoCool  
    OP
       2020-08-24 21:07:19 +08:00
    @linvon 读的是 Redis 队列的数据,一次读 2000 条放入内存里,之后处理。也不是完全负优化,因为我开了 2000 个 goroutine 确实比顺序执行跑的快得多。但调优的时候发现 2000 条 ~ 3000 条的时候,速度就不提升了,这时候可能是负优化了。
    linvon
        5
    linvon  
       2020-08-25 10:17:36 +08:00
    @PiersSoCool #4 涉及到 io 操作那用 goroutine 肯定有提升,速度不在一个量级上。2000 条在内存实际上很少,执行完全部数据用不了一秒。开 goroutine 本身也有开销的,当异步 IO 带来的提升已经被足够的 goroutine 利用完后,你再开就没什么作用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:45 · PVG 15:45 · LAX 00:45 · JFK 03:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.