我有一個製片人的消費機制,我不得不存儲生產的產品在數據庫,這是一個必要條件。另外我有幾個生產者和幾個消費者,生產者和消費者線程將訪問幾個數據庫表中的記錄; ProcessID列將決定哪個線程正在訪問哪條記錄。生產者 - 消費者和數據庫隊列
線程將通過Windows服務工作。
ProcessID的創建有三個原因。
1-如果線程不正常終止,將使用processID來避免重新啓動處理。
2-線程通過數據庫鎖定同步,並希望我將只有行鎖定,並且很可能在短時間內有很少的阻塞線程,因爲每個線程都將訪問幾條標記有ProcessID的記錄。
3-我想跟蹤哪個線程上的時間做了什麼,因爲我錯誤記錄到數據庫中。請注意,消費者會將項目發送到Web服務。
如果我用內存數組中爲隊列,我懷疑,這將增強性能,它具有以下缺點: -
當消費者去排隊的項,它將不得不使用其processID更新其在數據庫中的記錄。
生產者將項目插入到數據庫中,並使用Output stp參數得到它的ID,然後它將把它的ID放入隊列中,避免從數據庫重新讀取它,這是唯一的好處 - 內存隊列,避免重新讀取數據庫中的項目。 請注意,一旦將記錄插入到數據庫中,除消費者外,沒有任何內容會更新它。
的另一個問題是,我認爲運營商可以停止從數據庫中刪除它,如果我在內存隊列中,我會失去這個未來的消費有一定的項目。
隊列類將有鎖定私有對象上,訪問隊列的方法應該是同步的。我覺得我重複了一個線程將被餓死的可能性。我覺得我重複了一個線程被阻塞等待的時間。
兩個問題
1 - 我懷念在這個設計中的東西嗎?你認爲它會起作用嗎?
2 - 它是一個好主意,不使用內存隊列?