受控无限循环使用太多资源

时间:2013-08-10 11:23:59

标签: c loops infinite-loop

我正在一个更大项目的一部分工作,必须从大量的FIFO中读取并正确地重定向它们,具体取决于命令。为了达到这个目的,在无限循环中按顺序读取FIFO。

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

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

你有什么其他的想法可以避免这么多的重载吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

正如保罗所说,我认为最好的选择是使用selectexample that he gave足够清楚,可以理解如何使用它(我无法从手册页中理解它)。这是一个非常有用的工具,它不会是我最后一次使用它。