CSR B5348/B8675 消息生命周期

最近的项目一直有out of memory或者reset的问题,初步调查了下发现和message的生命周期有关。


正常了来说,message的生命周期分为3个阶段,在Messages调试窗口可以观察到

1,消息的生成,即send

2,消息的分发,即deliver

3,消息的释放,即free


Send

app或者系统库在传递消息时,肯定是需要一块内存来保存将要传递的消息的。

不论这个消息是

即时发送,使用MessageSend函数

或者

稍后发送,使用MessageSendLater函数

或者

条件发送,使用MessageSendConditionally函数

等等。

VM都需要申请一定的内存来保存这个消息。

在Messages调试窗口中,Send后面的数字就是发送该消息的时机,负数代表过去,正数代表将来。

例如-1ms表示在打印这条消息的1毫秒前已经发出去了。50ms表示我已经通知VM了让他50毫秒以后把这条消息分发出去。


Deliver

然后VM根据发送的要求,调用对应的task message handler来接收这个函数。

而从消息真正发送,到处理这条消息的回调函数接收到这条消息,的时间,就是deliver的时间。

比如VM在某个时刻已经按照send的要求,发出了消息,但是现在有别的函数要处理,等处理这条消息的函数进场,已经过去了20ms,

那么,在Messages调试窗口中就会在deliver后面看到-20ms。

如果deliver后面是0ms,那就是说VM一抛出这条消息,这条消息处理函数就进场了。显然所有deliver都这样那就完美了。


Free

等这条消息处理函数退出时,消息本身占用的内存才会被释放掉。就打印一条free。


===

而我现在的状况就是,消息已经发出了,处理函数一直不进场,deliver平均在25ms以上。

然后send的消息越来越多,free的速度跟不上,最终导致out of memory。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilonglucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值