1

我正在参与一个更大的项目,该项目必须从大量 FIFO 中读取并正确重定向它们,具体取决于命令。为了实现这一点,FIFO 在无限循环中按顺序读取。

问题是它消耗了太多资源。我可以理解这个过程总是在做操作并唤醒处理器,但我想避免这么多的过载。

  • 一个选项是使用信号,但它使处理变得更加混乱,并且在处理其中一个命令时很难避免切断执行。
  • 另一种选择是使用阻塞读取,但是我需要为每个 FIFO 设置一个进程,因为我不知道谁以及何时发送命令。
  • 另一种选择是睡觉,但我认为不是最好的选择,只睡几毫秒并没有太大的区别(我还没有尝试过)。

你有其他的想法来避免这么多的超载吗?

4

2 回答 2

1

线程池是否合适?http://en.wikipedia.org/wiki/Thread_pool_pattern

您可以拥有一个不断检查新工作的流程。当队列有东西时,可以分派一个线程来处理它。完成后,该线程返回到可用线程池(因此得名)。该模型适用于处理许多没有共享状态的小任务。

于 2013-08-10T11:35:37.253 回答
0

正如保罗建议的那样,我认为最好的选择是使用select. 他给出的示例足够清楚,可以理解如何使用它(我无法从手册页中理解)。这是一个非常有用的工具,而且不会是我最后一次使用它。

于 2013-08-10T14:43:56.033 回答