我有一套有限的任务需要由客户完成。客户在连接时被分配任务,并在完成前一个任务后继续获取新任务。每个任务需要由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)
但是,这似乎效率很低。有没有更有效的算法?