while(1)和阻塞调用之间的性能

时间:2016-08-19 07:46:31

标签: c# rabbitmq mq

我有一个小应用程序消耗来自RabbitMQ的消息。

目前它处于while(1)循环中,它调用" Dequeue"并在那里永远等待消息,然后处理消息。

所以我想的是阻塞电话" Dequeue"一个好主意或立即DequeueNoWait(没有立即返回)不会更好,甚至可能是" Dequeue"超时。迭代时当然会有更多。

谢谢

1 个答案:

答案 0 :(得分:0)

这是一个经典问题。您可以做的最好是使用阻塞Dequeue()超时,以便不仅可以处理RabbitMQ消息。例如:

  • 在Unix / Linux上也处理系统信号,如SIGHUP或SIGINT
  • on terminal命令也接受用户输入以打开循环,并显示消息“按ESC退出...”或类似的东西
  • 如果有其他输入流也在同一个线程中处理它们

应根据您的期望设置超时。对于某些系统信号,在将过程从水中喷出之前给出非常严格的超时。对于控制台应用程序,人类用户不会注意到150毫秒的超时,它仍然会看起来接近实时。

如果你没有阻止并且不使用超时,CPU将消耗不必要的资源以尽可能快地循环,没有任何好处。只有当时间非常重要时才会建议这样的事情。但是你也不会使用RabbitMQ。

编辑:有关超时的更多信息

  

1秒超时表示在1秒内接收到一条消息。消息在到达时仍会立即处理。超时意味着 OTHER 任务执行时间最多为1秒(平均延迟是超时的一半,因此0.5秒)。