我需要在员工之间分配电话。不同的员工在系统中具有不同的权重。例如,一名员工的呼叫次数要比其他员工多两倍。
现在我正在使用这个方案:
员工1 - 评级10.
员工2 - 评级9.
员工3 - 评级4.
员工4 - 评级3.
我正在使用此答案中的加权随机函数(Generating random results by weight in PHP?)来选择要拨打的电话号码。
问题是,一天没有多少电话。大约10-20。上面的方法对于较大的数字是可以的,但是通过少量的呼叫,员工4可以在某一天很容易地收到任何电话。有没有办法进行加权分配,这对小数字有效吗?或者上面的答案是最好的答案?
答案 0 :(得分:1)
您所拥有的是全天来电和员工以优先处理电话的方式。总而言之,你有工作要做,工人不平等。这是一个工作管理系统。有一种形式的优先级队列来处理这个问题。通常,我们认为这些工作具有优先权。在这里,它们都是一样的。因此,作业处于FIFO队列中。工人处于优先队列中。当一个工人完成一份工作后,工人就会进入队列。他们在优先级较低的任何人面前(在具有相同或更高优先级的任何人之后)。当要完成一项工作并且队列中有一名工人时,工人就会完成这项工作。
每个人都忙的时候,这一切都很好。当工作稀少时,这是不好的。同一个工人做所有的工作。我们不关心电脑,因为CPU不会抱怨。但是,我们希望将工作分散开来。基于节点的系统中使用的是计时器。某人在队列中等待的时间越长,该人的临时优先级就越高。时间增量取决于你。你可以说一个人的优先级每小时上升1。因此,要获得临时优先级,您将获得优先级并添加它们在队列中的小时数。这有助于确保分布式系统中的每个节点在某个时间获得一些工作。
在研究这个问题时,您将遇到的一个问题是,根据我的经验,大约99%的工作管理系统将所有优先级和重量放在工作上,而不是工人。所有工人都是平等的。所以,你必须翻转它。在我多年前的一本教科书中,他们只是改变了角色。您可以将其视为接听员工的电话,而不是将其视为接听电话的员工。电话会成为你的工人"员工成为你的工作"。然后,您可以将其视为基于优先级的基本队列。