在多线程编程中,经常会遇到两个线程之间需要通过传递消息进行通信的情况。
现在假设有两个线程: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关心的是否仍然是这条消息的处理结果。