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

2020-08-24 16:46:35 +08:00
 PiersSoCool

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

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

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

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

1535 次点击
所在节点    问与答
5 条回复
maemual
2020-08-24 16:48:48 +08:00
解析 JSON 吃 CPU,你到 CPU 核数基本就能吃满主机 CPU 了,再往上加就白白增加 goroutine 的调度成本了吧
PiersSoCool
2020-08-24 20:00:20 +08:00
@maemual 所以说还是有个度,超过这个度 goroutine 是低效的。
linvon
2020-08-24 21:04:09 +08:00
你的 json 来源呢?如果是从网络或者文件读取那 goroutine 肯定效率提升很大啊。但如果都在内存里,那完全就是 CPU 密集操作,你开 goroutine 就是负优化
PiersSoCool
2020-08-24 21:07:19 +08:00
@linvon 读的是 Redis 队列的数据,一次读 2000 条放入内存里,之后处理。也不是完全负优化,因为我开了 2000 个 goroutine 确实比顺序执行跑的快得多。但调优的时候发现 2000 条 ~ 3000 条的时候,速度就不提升了,这时候可能是负优化了。
linvon
2020-08-25 10:17:36 +08:00
@PiersSoCool #4 涉及到 io 操作那用 goroutine 肯定有提升,速度不在一个量级上。2000 条在内存实际上很少,执行完全部数据用不了一秒。开 goroutine 本身也有开销的,当异步 IO 带来的提升已经被足够的 goroutine 利用完后,你再开就没什么作用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/701001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX