pbc 优化
最近几天优化了一下 pbc 。
这是一个大改动,所以写 blog 记录一下。
首先,我为 rmessage 定制了一个 heap alloc ,在使用 rmessage 解包的时候不再调用系统的 malloc 。而是从一个连续内存 heap 上取用内存。这样在删除 rmessage 对象时也会更快。因为只需要把 heap 回收即可。
当然这样会导致 rmessage 解包时用到的内存增加。对于内存紧张,性能关键部分,我还是推荐 pattern 模式。虽然比较难用,但可以保证时间和空间性能。
另外,我增加了 upb 的 Event-based parsing 模式,见新增接口 pbc_decode
。
不过我认为这个 api 不适合直接在 C 里调用,但是用来做动态语言的 binding 不错。现在 lua binding 中的 decode 就改用这个实现了。这样每次解包就把所有项都解出来,而不用附着一个 userdata 。回避了手动调用 close_decoder
的问题。
btw, 根据一个同学使用的反馈,他们大多不主动调用 close_decoder
,而依赖 gc 回收 decode 过程中产生的 C 对象。但是这些 C 对象申请的内存不会通知 lua ,所以 lua 的 gc 触发条件不会及时触发。这使得 pbc 的 lua binding 可能占用大量内存。我这次的修改主要针对这个问题。
Comments
Posted by: lanmao | (10) August 11, 2015 07:47 PM
Posted by: Cloud | (9) August 10, 2015 09:41 PM
Posted by: lanmao | (8) August 9, 2015 09:38 PM
Posted by: lanmao | (7) August 9, 2015 09:02 PM
Posted by: Amtm | (6) October 23, 2014 11:07 AM
Posted by: ed hardy uk | (5) May 15, 2012 02:32 PM
Posted by: lsccsl | (4) May 4, 2012 09:23 AM
Posted by: zzzyyxzzz | (3) April 27, 2012 04:40 PM
Posted by: mayao11 | (2) April 26, 2012 07:31 PM
Posted by: 惠盈盈 | (1) April 26, 2012 07:22 PM