主人/工人是否规模?

时间:2010-10-25 14:08:16

标签: python concurrency

我有一个使用单独的python进程实现的master / worker模型。主进程包含受互斥锁保护的作业/结果列表。许多工作人员在许多机器上运行(大约200个工作进程)。

我注意到,在每台机器上,工作人员倾向于比其他工作流程多做或少做0-20%的工作,并且机器比其他机器多做或少做0-20%的工作。最快/最慢的工人和机器每天都不同。

这是主/工人模型的概念性问题,是否暗示有问题的实施或一切正常?

1 个答案:

答案 0 :(得分:3)

对于+/- 20%的事情最简单的解释是你看到了负载平衡问题;一些工人的工作比一些同龄人多20%。这可能代表一个实现问题,或者它可能只是离散性;如果你有200个工人流程但1040个大致相同的工作要做,那么1/5的工人流程将有额外20%的工作要做,除非你能细分工作,否则没有什么可做的。更精细。

主服务器/工作服务器(并且可以像其他任何方式一样轻松处理这些负载平衡问题),直到主进程中共享资源的争用开始变得非常重要。您可以通过将关键部分(受互斥锁保护的部分)减少到绝对最小值来向前推进一点扩展;通过聚合工作单元以便减少请求(但请注意,这与改进负载平衡的方向相反);或者拥有多个主人(可能是主人的等级制度)。如果这不起作用,您必须开始考虑更多的点对点工作调度算法,其中不再存在单个瓶颈。主人/工人的点对点模拟被称为work stealing,这是(恕我直言)似乎不应该工作的事情之一,直到某人告诉你这样做;它最近由Cilk推广。这个想法是每个人都得到一份任务列表,如果同伴需要更多的工作,他们会随机偷走它们并继续匆匆离去,直到完成。它比master / worker更复杂,但避免了单主机瓶颈。