我想,你的循環方式將作業分配以下方式:
W1 W2 W3 W4
-----------------
J1 J2 J3 J4
J5 J6 J7 J8
J9
添加一個新的工作是相當簡單的。您只需記住分配上一個作業的工作人員(循環法算法的狀態,將在後面稱爲最後一名工人),並將新作業分配給下一個工作人員。增加最後一名工人。
如果你想刪除的工作(例如,在上面的例子中J7
),做到以下幾點:首先,刪除工作:
W1 W2 W3 W4
-----------------
J1 J2 J3 J4
J5 J6 J8
J9
然後挑了最後一名工人,並重新分配的最後一份工作它失去工作(除非擦除工作是最後的工作)的工人:
W1 W2 W3 W4
-----------------
J1 J2 J3 J4
J5 J6 J9 J8
遞減的最後一名工人
如果你想添加一個工人,做如下:選擇最後一名員工的上一份工作,並將其分配給新員工,直到新員工的工作數量等於或少於第一名員工的工作數量。
W1 W2 W3 W4 W5
----------------------
J1 J2 J3 J4 J8
J5 J6 J9
相應地更新最後的工人。
如果您已擁有以上所有內容,那麼刪除工作人員非常簡單:只需完成所有工作並逐個添加一個工作即可。例如。如果您刪除W2
:
W1 W3 W4 W5
----------------------
J1 J3 J4 J8
J5 J9 J2 J6
根據您的數據的大小,應使用適當的數據結構,使這個高效。但我相信你知道要使用什麼結構。
工人如何在同一時間工作多個工作?在你的描述中,還有一個隱含的假設,即工人可以打斷他在工作中的工作,而另一個工人可以恢復這個中斷的工作。問題解決了嗎?還是您希望解決此問題的答案? – fjardon
一名工人可以同時工作多個工作,因爲每項工作都是作爲一個去程序啓動的。換句話說,每個工作可以被認爲是一個線程(儘管去例程不是線程)。工作相對簡單:將消息從數據庫推送到消息總線,因此將作業切換到另一個工作人員是微不足道的。 – F21
單個工作可以同時分配給多個工作人員嗎? –