【问题标题】:Real time IPC in Unix userspaceUnix用户空间中的实时IPC
【发布时间】:2017-11-01 05:48:57
【问题描述】:

我想为以下问题寻求最佳方法: 我有两个不同的过程:生产者和消费者。 生产者生产项目,其中每个项目都是一个无符号整数。而消费者消费它们,与普通消费者生产者问题不同的是消费者需要知道物品生产的确切时间。 消费者不能信任生产者,所以生产者不应该与商品一起提供时间,这迫使消费者在消费商品的那一刻向系统询问当前时间。 由于生产者是一个实时应用程序,因此所有这些都需要尽可能减少对生产者的影响。

我试图阅读 Unix 中的 IPC 机制,但我没有找到可以满足这些限制的东西。 消费者和生产者是用 C++ 编写的。

欢迎任何想法, 在此先感谢

【问题讨论】:

  • 我想您希望物品的生产和消费之间的时间尽可能短,不是吗?所以消费者本身也应该是一个实时应用程序。否则,您可以在闲暇时使用具有常规优先级的进程来消费事物,并让内核负责不让进程踩到它们的脚趾。

标签: c++ unix real-time ipc producer-consumer


【解决方案1】:
  1. 在生产者和消费者之间使用共享内存。
  2. 对消费者端的事件进行轮询,以最大限度地减少延迟。
  3. 将使用者线程固定到 CPU 以防止上下文切换(CPU 亲和性)。
  4. 使用 Timer Stamp Counter (TSC) 避免长时间的“获取时间”系统调用。

这将为您提供最精确的结果。

当然,如果手头有其他要求,您可以牺牲上面的一些项目,以使您的消费者应用程序的 CPU 效率更高或不那么复杂......这取决于您。

【讨论】:

  • 谢谢,我不知道Timer Stamp Counter,我会看看的。这仍然不够,因为消费者仍然需要等待下一次上下文切换。
  • @TomerGolomb 你是什么意思?消费者必须轮询事件以避免任何上下文切换 (#2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2010-09-29
  • 2014-07-24
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多