我有一套有限的任務需要由客戶完成。客戶在連接時被分配任務,並在完成前一個任務後繼續獲取新任務。每個任務需要由3個獨特的客戶完成。這可以確保客戶端不會給任務提供錯誤的結果。檢查超時的算法
但是,我不希望客戶花費超過3000毫秒。由於某些任務是相互依賴的,這可能會阻礙進展。
問題是我在檢查任務超時時遇到問題 - 當沒有可用的任務時應該完成這些任務。
這時每個任務有一個名爲assignedClients
屬性,它看起來如下:
assignedClients: [
{
client: Client,
start: Date,
completed: true
},
{
client: Client,
start: Date,
completed: true
},
{
client: Client,
start: Date,
completed: false
}
]
所有任務(約1000)都存儲在一個單一的陣列。基本上,當一個客戶端需要一個新的任務時,僞代碼是這樣的:
function onTaskRequest:
for (task in tasks):
if (assignedClients < 3)
assignClientToTask(task, client)
return
// so no available tasks
for (task in tasks):
for (client in assignedClients):
if (client.completed === false && Time.now() - client.start > 3000):
removeOldClientFromAssignedClients()
assignClientToTask(task, client)
但是,這似乎效率很低。有沒有更有效的算法?