我的程序從交換中獲取大量數據。數據被解析成刻度對象。典型的刻度線避免頻繁鎖定
struct Tick
{
string ID;
int bidprice[5];
int askprice[5];
int totalTradedQuantity;
int totalTradedVolume;
.....
.....
}
此刻度線對象發佈到網絡並登錄到文件中。目前我正在鎖定更新記號和發佈。
Parser Part:
lock();
tick update
unlock();
Publisher Part:
lock();
tick publish;
unlock();
由於數據頻率很高(每秒5000個),我必須爲每個收到的數據進行鎖定。會導致性能問題嗎?我如何避免採取這麼多的鎖。任何人都可以建議一個最小鎖定的設計實現。請幫忙。
我認爲它需要鎖機制。我沒有看到任何減少它的選項。如果我沒有錯,你在內部使用Mutex鎖定機制。如果是這種情況,請使用try-lock功能。它至少不會阻止線程。 –
「標記更新」和「標記發佈」包含了什麼內容。如果你所做的只是將已經準備好的數據複製到某種列表中,那麼它不會壞。如果涉及很多工作,那麼也許你應該考慮是否可以將某些工作「移出」鎖定,因此只需「將數據複製到列表中」的最後步驟。同樣,對於「滴答發佈」,只有在您從列表中提取數據時才鎖定 - 一旦您擁有分離的數據項,您可以釋放該鎖。 –
該問題沒有足夠的有關更新和發佈過程的信息。它們是否在共享Tick的實例的單獨進程/線程中運行? –