回收线程是否有优势

时间:2013-05-02 22:12:57

标签: multithreading parallel-processing

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

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

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

  1. 为A部分创建N个线程,然后在A部分完成后破坏这些线程。然后为B部分分配N个新线程。
  2. 使用各种可用的同步方法为A部分和B部分使用相同的线程。
  3. 当性能很重要时,为解决方案1创建新线程需要多少开销。我应该选择解决方案1还是解决方案2?

1 个答案:

答案 0 :(得分:1)

并行框架,例如OpenMP循环线程。这称为线程池,您可以在网站上找到有关这些信息的信息。这是一篇相关的帖子:Thread Pool vs Thread Spawning

如果您真的关心性能,找到适合您应用的最佳方法是尝试这两种方法并进行测量。

通常,如果您的处理任务很昂贵,并且如果您只生成新线程,代码更容易理解,那么就这样做。

只是稍微为论点着色,请查看我在前几天使用实验回答的帖子:Why are 50 threads faster than 4?