增加消息队列深度是否是在 C/Linux 中同步生产者和消费者的合适解决方案?

Is increasing the message queue depth is an appropriate solution to sync Producer and Consumer in C/Linux?

这对我来说更像是一个设计问题。

场景-

我有一个多线程的嵌入式系统 - 其中一个线程是 xxx -- 一种网络协议,它告诉邻居路由器 -- Producer

另一个线程是 xxx-TE - 这是一个流量工程 - xxx 协议。 - 消费者。

他们都通过.消息队列。因此,基本上生产者将数据放入线程 xxx-TE 的 xxx-TE 队列中。

问题 -

当我们有很多节点或者简单的说很多来自xxx的路由信息​​时,放入xxx-TE队列的消息就丢失了。

解决方案 -

这个解决方案正确吗? 我们是否应该增加队列深度以使消息不丢失。

[症状] - 在消息队列中推送消息时出现错误。

可能不会。

一般来说,消息队列应该尽可能多地保持空或接近空。如果您的队列通常不为空,则需要提高处理消息的速度。

增加队列的大小通常不是解决方案;如果队列的填充速度快于清空速度,它会总是最终会满;增加尺寸只会使填充时间稍长。

(如果消息以极度 "bursty" 的模式生成,则例外。如果是这种情况,增加队列大小可能有助于缓冲这些突发事件。但是,一个大的突发事件,或几个背靠背爆发,可能会让你回到同样的情况。)