2011-11-21 78 views
0

我正在設計一個OMS並嘗試使用多線程技術來加速處理。線程池和數據親和力

一個簡單的方法是靜態分配線程:一個線程適用於以字母開頭的所有證券。很顯然,其中一些可能非常繁忙,而另一些則無所事事。而且我們事先並不知道用戶將進入哪些股票。

所以我轉向線程池。現在時間可能會在線程間更均勻地分配。但是需要處理一些開銷:我必須鎖定每個訂單,這當然不愉快。

有關如何最小化鎖定時間並實現更高吞吐量的任何想法?

非常感謝您的建議。

P.S,它是一個Unix環境。使用的語言是C++

回答

0

通常,每個任務的線程是非常糟糕的決定。最好的辦法是將任務分成具有自己線程池的邏輯組(或者,每個任務可以有1個線程)。你也應該組織任務之間的溝通,例如通過查詢。 你是否在尋找像threadpool這樣的現有線程池實現?

+0

Alex, 在我看來,所有線程池實現都不考慮數據親和性。所以如果我使用線程池,大量的鎖/通知是必要的,以確保數據的完整性。 您是否知道線程池的任何實現將數據關聯考慮在內?理想情況下,我不想在我的代碼中鎖定任何鎖。訂單的所有事件都應按順序處理。 謝謝 Pat – user1057019

+0

「所有線程池實現不考慮數據關聯」 - 是的。 「如果我使用線程池,需要大量的鎖/通知來確保數據的完整性」 - 不。基本上,您必須添加鎖定/通知來提供原子添加/刪除查詢操作,以防使用隊列進行通信。我想你最好看看拋出ACE(cs.wustl.edu/~schmidt/ACE.html)教程,它們提供了關於線程池服務器創建的一些信息。 –