为什么我能找到很多关于"工作窃取"的信息,而没有关于"工作耸肩"的信息作为动态负载均衡策略?
通过"工作耸肩",我的意思是将多余的工作从繁忙的处理器推到负载较小的邻居,而不是让闲置的处理器从繁忙的邻居那里拉工作("偷工作").
我认为两种策略的一般可扩展性应该相同.但是我认为,就延迟和功耗而言,在确实有工作要做的时候唤醒空闲处理器,而不是让所有空闲处理器周期性地轮询所有邻居以进行可能的工作,它会更有效率.
无论如何,一个快速谷歌没有出现在"工作耸肩"或类似标题下的任何东西,所以任何指向现有技术的指针和这个策略的行话将是受欢迎的.
澄清
我实际上设想工作提交处理器(可能是或可能不是目标处理器)负责查看首选目标处理器的直接位置(基于数据/代码位置)以决定是否应该给予近邻相反,因为他们没有那么多的工作要做.
我不认为决策逻辑在这里需要的不仅仅是对立即(通常是2到4个)邻居的估计q长度的原子读数.我不认为这种情况不会超过盗贼从他们的邻居那里进行民意调查和偷窃所暗示的.(我在两种策略中都假设"无锁,无等待"队列).
解析度
似乎我的意思(但只是部分描述!)作为"工作耸肩"策略是在"正常"的前期调度策略领域,恰好是关于处理器,缓存和内存忠诚以及可扩展的.
我发现很多参考文献都在搜索这些术语,其中一些看起来非常可靠.当我发现一个最符合(或拆除!)逻辑时,我会用我的"工作耸肩"的定义发表参考文献.
terminology load-balancing scheduling scheduled-tasks multiprocessor
我正在研究一个多线程程序,我有许多工作线程执行不等长的任务.我想对任务进行负载平衡,以确保它们完成大致相同的工作量.对于每个工作T 我 我有一个数字c 我 提供了一个很好的近似认为是必需的任务的工作量.
我正在寻找一个有效的(O(N)N =任务数或更好的)算法,这将给出"大致"给定c i值的良好负载平衡.它不一定是最优的,但我希望能够对结果分配的糟糕程度有一些理论界限.
有任何想法吗?
我打算实现一个线程池来管理我的项目中的线程.线程池的基本结构是我的头,队列,一些线程生成任务进入这个队列,一些由线程池管理的线程等待处理这些任务.我认为这是班级制片人和消费者问题.但是当我在网上google线程池实现时,我发现那些实现很少使用这个经典模型,所以我的问题是为什么他们不使用这个经典模型,这个模型有什么缺点吗?为什么他们不使用完整的信号量和空信号量来同步?