而(true)vs“”中的EventWaitHandle通知;每秒1000次”;处理

本文关键字:通知 每秒 1000次 处理 EventWaitHandle 中的 vs true | 更新日期: 2023-09-27 18:27:26

我正在编写交易引擎。我收到来自市场的最新消息。它大约是每秒1000次更新,我把它们放在队列中。考虑到我应该如何处理消息,问题是——使用EventWaitHandle合理吗?还是最好使用while(true)循环?

while (true)
{
    queue.wh.WaitOne(); // do I need that to be executed 1000 times per second or just skip it?
    if (queue.Count > 0)
        queue.Dequeue()
        ....

或者你可以提出一些不同的建议。。。

而(true)vs“”中的EventWaitHandle通知;每秒1000次”;处理

您应该研究这两种方法。

我的第一个版本是:

while(true)
{
  while(queue.Count > 0)
  {
    var md;
    lock(queue)
    {
      md = queue.Dequeue();
    }
    ...    
  }
  Thread.Sleap(0);
}

WaitOne()足够聪明,可以首先使用旋转锁,所以我认为更改代码不会在性能/资源方面获得任何好处。也许您唯一可以做的就是用while替换if,这样您就可以在一个"周期"内处理所有排队的请求。

您可以将WaitOne()放在else子句中。

if (queue.Count > 0)
    queue.Dequeue();
else
    queue.wh.WaitOne();