如何监视和避免过度填充消息队列(posix)

时间:2013-06-24 14:20:52

标签: posix message-queue

我正在努力避免过度填充邮件队列,所以这里几乎没有问题

使用 mq_attr

  1. 什么时候 mq_curmsgs 已满?当它为0或max_msgs
  2. 当它满了,我需要冲洗吗?
  3. 您是否建议使用以下任何一项:选择投票 epoll ?如果是这样我如何使用它们

1 个答案:

答案 0 :(得分: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事件进行多路复用的功能,并被告知何时队列中有什么东西需要读取。
相关问题