我正在開發一個類似SVN的系統(基本上有登錄/註銷+ put/get/list/delete命令),它們應該接受來自多個客戶端的命令。我的想法是將所有接收到的命令放入一個(阻塞)隊列結構中,以便在不同的線程上順序執行它們。後來,有了更多的時間,我可以設計一些智能機制來理解是否可以同時執行一個或多個下一個隊列消息,這樣我可以加快一點過程(例如,如果我有兩個命令隊列將在不同的項目上工作,沒有競爭條件/共享數據問題)。如何更好地在顛覆式系統中同時處理命令?
我現在正面臨決定這是否真的是問題的最佳解決方案的問題。我可以鎖定文件,因爲我正在使用它們,但是我擔心這可能會導致某些特定的角落案例出現死鎖(儘管我仍然無法想到可能發生的具體情況)。
該項目將用於網絡安全類。因此,這個SVN只是我後來奠定我的安全問題核心的基礎。我不認爲性能是最重要的(但要確保死鎖不會發生YES!),所以目標是算法的正確性。
你會如何處理這種情況?
跳過平常的「不要重新發明輪子」的說法,鎖定文件級別應該足以滿足您的需要;如果您不將鎖定請求拆分爲按文件粒度(但爲什麼不呢?),它只會死鎖。 – Viruzzo 2012-03-20 18:49:37
當我做一個PUT「abc.txt」時,我在資源庫中創建了一個名爲「abc.txt」的文件夾,每個文件的文件爲0,1,2,3,...(這是一個拼版,不是我可以做很多事情)。所以我有點害怕,當在不同版本上進行操作時,我可能會有2個客戶想要在不同的版本上同時操作。 – 2012-03-20 18:55:00
@devouredelysium:我相信我不會相信你的觀點。客戶端可以在「服務器」上「提交」同一文件的多個版本。但是,如果這是「像系統一樣」,爲什麼你擔心在這種情況下的協調性。在處理大量數據所需的操作之前,請檢查批量中是否已有更新版本的*任何*組件。你能否澄清更多你的情況? – Tigran 2012-03-20 19:05:32