2012-03-09 22 views
1

我在寫交易引擎。我從市場veeeeeryyyy然後收到更新。這大約是每秒1000次更新,我把它們放在隊列中。考慮到我應該如何處理消息,問題是 - 使用EventWaitHandle還是更合適?使用while(true)循環?雖然(真)與「每秒1000次」處理中的EventWaitHandle通知

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

'queue'是什麼對象? – ken2k 2012-03-09 12:35:37

+0

幾乎沒有;)我每秒處理數以萬計(5強制交換)。你認爲時間敏感嗎?我不是 - 我向上交易毫秒,而不是高頻。 – TomTom 2012-03-09 12:42:23

+0

C#程序員的有趣用戶名。 – 2012-03-09 12:43:15

回答

0

你應該研究這兩種方法。

我的第一個版本是:

while(true) 
{ 
    while(queue.Count > 0) 
    { 
    var md; 

    lock(queue) 
    { 
     md = queue.Dequeue(); 
    } 

    ...  
    } 

    Thread.Sleap(0); 
} 
0

WaitOne()是明智的,足以首次使用自旋鎖,所以我想你不會獲得在性能/資源任何改變你的代碼。也許你唯一能做的就是用while替換你的if,這樣你就可以在一個「週期」中處理所有排隊的請求。

+0

Spin Locks僅適用於ManualResetEventSlim – 2012-03-09 12:45:28

+0

你是對的......哦年齡... – 2012-03-09 14:18:05

0

你可以把WaitOne()在else子句。

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