1

我正在尝试 Java ForkJoin 框架并编写了一个程序来处理大型数据列表。

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

问题是,阈值的大小将获得更好的性能,还是灵活且仅与 CPU 或线程支持的核心数相关?

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

4

1 回答 1

1

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

当我并不总是知道时,我使用了一个在大多数情况下效果都很好的通用公式 Q:我想生成大约 8 倍于线程的任务或最小阈值 32k(当然取决于 N。)

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

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

于 2015-12-30T15:33:07.697 回答