浅谈多线程编程中对过期消息的处理

在多线程编程中,经常会遇到两个线程之间需要通过传递消息进行通信的情况。
现在假设有两个线程:thread_background和thread_foreground,
thread_background负责不影响跟用户交互的处理,所以可以放到后台偷偷做;
thread_foreground负责跟用户的交互行为,所以其要求是要能快速处理,不能影响到用户的体验感。

有以下几个情形:
情形一:
(1) thread_foreground发送一个处理数据的请求消息给thread_background;
(2) 用户临时失去兴趣;
(3) thread_background开始处理到这条消息;

情形二:
(1) thread_foreground发送一个处理数据的请求消息给thread_background;
(2) thread_foreground发送另一个处理数据的请求消息给thread_background;
...
(3) thread_foreground发送nth个处理数据的请求消息给thread_background;
(4) thread_background获得CPU使用权开始处理message queue中的第一条消息;
(5) thread_background获得CPU使用权开始处理message queue中的第二条消息;
...

这两种情形都是说明thread_background处理了过期消息的情况。
既然是过期的消息,那我们期望的结果应该是不去处理直接丢掉他们。
从理论上讲,对过期消息的处理肯定会影响到系统性能,有百害而无一益。

一种方法就是:
(1) thread_foreground发送消息给thread_background时携带一个match_id;
(2) thread_background在处理消息时去检查这个match_id是否匹配,如果不匹配则丢弃这条消息;
(3) 如果match_id匹配,则去检查thread_foreground关心的是否仍然是这条消息的处理结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值