Java7中哪个阈值会更好ForkJoinTask

Java7中哪个阈值会更好ForkJoinTask

问题描述:

我正在尝试Java ForkJoin框架并编写了一个处理大型数据列表的程序。Java7中哪个阈值会更好ForkJoinTask

众所周知,字段阈值总是在ForkJoinTask中设置,以指出数据列表分区的最小数量。

问题是,阈值有多大或多少会使性能更好,或者是灵活的,只与CPU或线程支持的核心数量相关联?

在并行计算框架(如Forkjointask)中是否有阈值的最佳实践?

没有设定阈值的规则。一个好的数字取决于数组中元素的数量(N),每个元素(Q)的处理类型(对两个数字进行简单比较是一个低Q,做一个复杂的计算是一个高Q.)

我使用的通用公式在大多数情况下都能很好地工作,但我并不总是知道问:我想要生成的任务多于线程的8倍,或者32k的最小阈值(当然取决于N)。 )

int temp = count/(threads << 3); 
threshold = (temp < 32768) ? 32768 : temp; 

其中count为N,threads为线程数。

+0

嗨,谢谢你的回答。 32768应该是2的15次方?为什么这个数字可以是阈值的上限? – Vincent

+0

选择你自己的号码。 32k是用于特定的操作。正如我首先说的那样:没有设定阈值的规则。 – edharned