0

在 C++ 中,我想创建一个具有以下结构的算法:

  • 顺序部分
  • 平行部分 A
  • 顺序部分
  • A 平行部分 B
  • 顺序部分

使用pthreads,我可以想到两种解决问题的方法:

  1. 为 A 部分创建 N 个线程,然后在 A 部分完成后销毁这些线程。然后为 B 部分分配 N 个新线程。
  2. 使用可用的各种同步方法对 A 部分和 B 部分使用相同的线程。

当性能很重要时,为解决方案 1 创建新线程需要多少开销。我应该选择解决方案 1 还是解决方案 2?

4

1 回答 1

1

OpenMP 等并行框架回收线程。这称为线程池,您可以在网站上找到有关这些的信息。这是一篇相关文章:线程池与线程生成

如果您真的关心性能,找出适合您的应用程序的最佳方法是尝试两种方法并测量它们。

一般来说,如果您的处理任务很昂贵,并且如果您只是产生新线程,代码更容易理解,那么就这样做。

只是为了给这个论点增添一点色彩,看看我前几天用实验回答的这篇文章:为什么 50 个线程比 4 个快?

于 2013-05-02T22:18:19.573 回答