Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于在多个辅助线程中平衡负载的算法_Java_Algorithm - Fatal编程技术网

Java 用于在多个辅助线程中平衡负载的算法

Java 用于在多个辅助线程中平衡负载的算法,java,algorithm,Java,Algorithm,我有一个从key1到keyn的HashMap,每个键的值是一个对象列表,每个键上有不同数量的对象 我还知道对象的总数(分布在各个键之间) 我的目标是将数据加载到T线程中,K作为每个线程中的平均记录数 约束: 单个键的对象列表应转到single thread。(或无法拆分)。 但是,我们可以使用不同的键对不同的记录列表进行分组 是否有任何经过验证的算法正在执行相同的任务 例如: 总尺寸为=1000 请求映射= k1->100 k2->50 k3->200 k4->250 k5->150 k6->8

我有一个从key1到keyn的HashMap,每个键的值是一个对象列表,每个键上有不同数量的对象

我还知道对象的总数(分布在各个键之间)

我的目标是将数据加载到T线程中,K作为每个线程中的平均记录数

约束: 单个键的对象列表应转到single thread。(或无法拆分)。 但是,我们可以使用不同的键对不同的记录列表进行分组

是否有任何经过验证的算法正在执行相同的任务

例如:

总尺寸为=1000
请求映射=

k1->100
k2->50
k3->200
k4->250
k5->150
k6->80
k7->60
k8->90
k9->20

现在输出可以是:

T1=k4(250)
T2=k3+k2(250)
T3=k1+k5(250)
T4=k6+k7+k8+k9(250)


这被称为where
V=总大小/线程数

,或者执行调度系统经常执行的操作:按大小对块进行排序,将最大的发送到线程1,将下一个最大的发送到线程2,等等。当线程N完成时,它将获得下一个块(剩余的最大块),等等。不保证是最优的,通常足够好,并且经常,如果无法准确估计工作负载,那就更好了。感谢您的评论,不幸的是,我需要提供启动线程之前所需的总线程数。我在这里的逻辑是,对密钥大小映射进行排序(如您所说),然后将其中最大的一个作为K,然后在集合的其余部分中搜索合适的匹配项。