我最近採用跳躍列表數據結構來實現併發優先級隊列 - 爲了這個問題,如果你不知道跳過列表是什麼,我相信只是描繪一個鏈表會是足夠回答。我嘗試了最小的鎖定(即允許同時存在多個入隊和出隊,如果需要的話只鎖定節點或它們的前向指針,儘快釋放鎖,使用互鎖的遍歷列表等)。什麼時候更精細的鎖定更好的性能?
我對結果感到滿意。然而,編寫一個定期的跳過列表,其中包含一個syncroot鎖定(即在任何給定時間只允許執行一次操作),其實際速度是其兩倍。
我認爲我的執行過程中必須有錯誤。然而,微軟的網站上列出的甚至是「併發優先級隊列」,實際上只允許一個運行在同一時間(即約入隊和出隊SyncRoot上的鎖)
作爲一般規則,(和請原諒我,如果這個問題太籠統了),在更多的細粒度鎖定實際上會導致性能改進的什麼時候?我想在我的情況下,因爲我實際上必須使用Interlocked.Exchange遍歷大型列表(還有更好的方法嗎?)以及多個測試和測試和集合等,這會降低排隊和出隊速度。
此外,有沒有一種工具可以幫助我確定大部分時間都花在哪裏?謝謝。