【问题标题】:How to monitor and avoid over-filling a message queue (posix)如何监控和避免过度填充消息队列(posix)
【发布时间】:2013-06-21 02:18:21
【问题描述】:

我正在努力避免过度填充消息队列,所以这里有几个问题

当使用 mq_attr

  1. mq_curmsgs 何时满?当它为 0 或 max_msgs 时
  2. 满了还需要冲洗吗?
  3. 您是否建议使用以下任何一种:selectpollepoll?如果是这样,我该如何使用它们

【问题讨论】:

    标签: posix message-queue


    【解决方案1】:

    (1) mq_curmsgs == mq_maxmsg 已满

    (2) 仅当您想继续写入时。如果您从不阅读,那么将内容排在队列中有什么意义?如果您问是否可以动态扩展队列而不是阅读它,那么不。队列限制在创建时指定。

    (3) 取决于你在做什么。您阅读队列的替代方法基本上可以归结为以下几点:

    1. mq_receive 默认会屏蔽。
    2. 可以使用mq_open 将队列打开为非阻塞状态,或者使用mq_setattr 将其更改为非阻塞状态。为您提供基本的轮询功能,以查看当前是否有要阅读的内容。
    3. 您可以使用mq_notify。这允许您指定 (a) 信号或 (b) 每当空队列收到新消息时生成线程。
    4. 您可以使用mq_timedreceive。如果队列处于阻塞模式,这只会阻塞您指定的时间长度。
    5. 在linux下可以使用select等,因为mqd_t类型是文件描述符。这可能不适用于其他 POSIX 系统。 select 和兄弟为您提供了将队列与其他 i/o 事件多路复用的能力,并在队列中有要读取的内容时收到通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      相关资源
      最近更新 更多