大量的对象创建,内存申请,有没有好的办法优化

2021-04-30 12:16:23 +08:00
 boynanboy
求教各路大神们,如题,已经使用了 tcmalloc 和 protobuf arena,
多线程场景下,每个线程内部都会存在大量的对象创建(通过 arena createMessage ),对象结构复杂暂时无法优化,目前性能依旧很差,耗时很高,有没有好的方法
2375 次点击
所在节点    C++
8 条回复
wanguorui123
2021-04-30 12:50:29 +08:00
对象池
catror
2021-04-30 13:06:51 +08:00
放个火焰图出来看看
araraloren
2021-04-30 15:19:57 +08:00
只能预先申请了,对象池
gBurnX
2021-04-30 15:22:28 +08:00
1.这种问题,先别急着用别人推荐的 xxx,自己要先思考,一步一步来。
ch2
2021-04-30 15:22:35 +08:00
池化,一次申请大量对象,用到的时候从池子里取
gBurnX
2021-04-30 15:41:57 +08:00
不小心按了发送,继续上面的:

2.先看看目前瓶颈在哪。

可以通过对照法。比如,假设这些对象,已经在 CPU cache 中创建完毕,甚至已经在物理内存的一块私有区域被创建成功后,把它移动到内存的另一块可用位置,需要多少时间。

然后对比你程序中的这一块业务,看看有没有速度差。有的话,差了多少。顺序与随机两种方式都要测。

接着,测试一下上述业务的单逻辑线程,单物理核,单 CPU 的成绩。然后再测测并行的成绩。并行最好别带锁,每个 CPU 、每个逻辑线程,只管理自己对应的内存条。

测试后,把测试数据,与你程序的数据,都放出来看看。
zzzzzzzzzp
2021-04-30 16:17:20 +08:00
pb 的 string 不能分配在 arena 上,string 很多用 arena 的效果一般
NealLason
2021-05-04 12:55:52 +08:00
libumem

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

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

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

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

© 2021 V2EX