如何在多个级别的用户之间平等地共享资源

2024-06-02 06:09:05 发布

您现在位置:Python中文网/ 问答频道 /正文

问题: 一次可以处理的作业数量有限。有多个用户共享这些资源(worker),目前还没有一种算法能够以相同的方式共享资源

示例: 共有4个团队的8名工人和4名用户,每个团队按此顺序请求10个工作。此时,处理是以FIFO的形式进行的,第一个用户将占用所有的工作人员,其他人需要等待很长时间。用户被分成小组

到目前为止,我的解决方案是: 1.每个团队最多可以有1/(没有工作的团队)*100%(例如,1/4*100=25%)。所以每个团队有25%的可用位置(8个),也就是说2个。 2.这两个位置将在团队成员之间平均分配

  _________________________________________________________________________________________
  | Worker 1 | Worker 2 | Worker 3 | Worker 4 | Worker 5 | Worker 6 | Worker 7 | Worker 8 |
  -----------------------------------------------------------------------------------------
  |      Project 1      |      Project 2      |      Project 3      |      Project 4      |
  -----------------------------------------------------------------------------------------
0 |  User 1  |  User 1  |  User 2  |  User 2  |  User 3  |  User 3  |  User 4  |  User 4  |
1 |  User 1  |  User 1  |  User 2  |  User 2  |  User 3  |  User 3  |  User 4  |  User 4  |
2 |  User 1  |  User 1  |  User 2  |  User 2  |  User 3  |  User 3  |  User 4  |  User 4  |
3 |  User 1  |  User 1  |  User 2  |  User 2  |  User 3  |  User 3  |  User 4  |  User 4  |

因此,行0可能已经在运行作业,其余行可能是挂起的作业。我这样安排他们,这样他们每个人都会收到一张从左到右,从1到n的票号,这意味着将收到第一个空槽的顺序

他们将收到的第二个数字是他们所在的行,因为我需要计算持续时间的估计值。如果你在第2行,那么你可能会等待2个作业完成

基本代码示例:

jobs = load_jobs()
jobs = compute_priority_and_estimate(jobs) # job.priority=x, job.estimate=seconds
persist_jobs_in_db(jobs)

然后在另一个过程中

jobs_to_process = load_jobs_to_process(free_slots=10) # order by job.priority ASC, limit 10

我认为这种方法是正确的,但实现有点混乱,我正在寻找一种更简单的方法或算法,可以保持代码干净

编辑:问题是是否有任何一种,如果现有的实现或算法类似的想法,我可以启发

我希望我尽可能清楚地表达了这个问题


Tags: 代码用户project算法示例顺序作业jobs
1条回答
网友
1楼 · 发布于 2024-06-02 06:09:05

我有点不确定问题到底是什么,所以我只想抛出几个想法。我觉得你排队是对的

如果要确保调度器公平地从多个团队中选择工作,可以为每个团队设置一个队列。在实现方面,每个团队队列需要一个线程,该线程将项目从团队队列中移除,并将其放入共享队列中,该队列的最大大小为调度器从中获取工作的队列

另一方面,如果您希望在所有时间内公平地平衡团队之间的工作,您可以使用优先级队列和每个团队的单独计数器。每当一个项目被添加到队列中时,您就从团队的计数器中选取下一个数字,并将其用作优先级。这意味着,如果您引入一个新的团队来产生大量的工作,它将占用调度程序,直到它的计数器赶上其他团队

相关问题 更多 >