消息队列溢出避免

时间:2015-09-17 09:09:05

标签: debugging operating-system pthreads embedded ipc

我在C ++中使用消息队列模板来排队我的消息,这些消息恰好排队SIP消息。我的队列大小是固定的,当我增加消息的速率和数量时,我能够检测到消息队列中的溢出流

我想避免消息队列溢出。因此,如果有人可以在消息队列中指导我实际的溢出避免技术,那将会有所帮助。

关于流行的POSIX消息队列溢出避免的建议也很受欢迎,因为我会从中获得一些想法。

2 个答案:

答案 0 :(得分:3)

您可以检测溢出情况,这很棒。接下来,您只需要在溢出时定义行为。通常有两种选择:阻止或失败。

溢出失败很明显,阻塞队列需要一个互斥和条件变量:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.button_click));            
    }
}

当队列被消耗且不再溢出时,请<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale = "1" android:toXScale = "0.9" android:fromYScale = "1" android:toYScale = "0.9" android:pivotX="50%" android:pivotY="50%" android:duration = "50"> </scale> </set>

答案 1 :(得分:1)

您通常对消息传递队列所拥有的不是溢出 - 因为溢出太晚了。你有像High Watermark这样的东西。 (Low Watermakr也值得一提,因为当你在Low Watermark上保持一致意味着你可能有太长的队列或太多的处理程序)。

点击High Watermark后,您会向用户发出信号。您还可以实现多种策略,从而依赖于消息的语义。例如,您可能会开始跳过每一条消息。您可以使用溢出缓冲区&#39; - 极其轻量级的处理程序,它只是简单地读取队列中的所有消息并将它们存储在某种缓冲区中,可以像文件一样简单,以便以后处理。你可能会做很多事情,但是你再次在High Watermark上做,而不是在队列已经满了的时候。