最好的方法将循环划分为多个线程?

时间:2018-11-14 20:34:02

标签: concurrency java-threads

我有一个循环重复8次,我想在不同的线程中运行每个循环,这样它才能更快地运行,我在网上查找了该循环,但我无法确定执行此操作的方法。循环内没有共享资源。有任何想法吗? 对不起,英语不好

1 个答案:

答案 0 :(得分:0)

最佳方法是分析程序的使用方式,并确定可以做出的最佳成本与性能折衷。即使在像go这样的语言中,线程也有不小的开销。并且在Java之类的语言中,这可能是一笔巨大的开销。

您需要了解在线程上分派操作的成本与执行该操作的时间的成本以及可以应用的执行模型。例如,如果您尝试:

for (i = 0; i < NTHREAD; i++) {
      t[i] = create_thread(PerformAction, ...);
}
for (i = 0; i < NTHREAD; i++) {
      join_thread(t[i]);
}

您可能认为您做得很棒,但是直到您支付了创建其他线程的开销之后,第NTHREAD-1个线程才开始。相反,如果您以树状结构创建线程,并且操作系统没有崩溃,则可以显着降低延迟。

所以,最好的做法是:测量,编写通用案例并针对特定案例进行配置。