我正在写交易引擎。我收到了来自市场的最新消息。它每秒约有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()
....
或者你可能会提出不同的建议......
答案 0 :(得分:0)
WaitOne()
很聪明,首先使用自旋锁,所以我认为你不会在性能/资源上获得任何改变代码的东西。也许您唯一可以做的就是将if
替换为while
,这样您就可以在一个“周期”中处理所有排队的请求。
答案 1 :(得分:0)
您应该调查这两种方式。
我的第一个版本是:
while(true)
{
while(queue.Count > 0)
{
var md;
lock(queue)
{
md = queue.Dequeue();
}
...
}
Thread.Sleap(0);
}
答案 2 :(得分:0)
您可以将WaitOne()
放入else子句中。
if (queue.Count > 0)
queue.Dequeue();
else
queue.wh.WaitOne();