在数据库表中,我保留了一个任务列表。为简单起见,假设任务是一个整数,并让表中有 100 个整数按递增顺序排列。(增加顺序意味着如果有人正在处理任务 N,那么所有小于 N 的任务都已经在处理)
我还有 5 个客户端连接并从数据库中选择任务,并在任务完成时更新数据库。
我不希望任何两个客户选择相同的任务。
Whenever a task is picked, I add it to another table, 'tasksTable'. 选择新任务时,我在'tasksTable'中找到max_int,然后选择task = max_int+1
为了避免重复工作,我将拣选任务的过程序列化,即
getlock
read max_int
pick task
update tasksTable
releaselock
因为我只有大约 10 名工人,所以序列化不是什么大问题。如果我有 1000 个客户怎么办。如何并行化任务挑选?