2013-05-02 69 views
0

在C++中的優點,我想創建具有以下結構的算法:是否有回收線程

  • 甲順序部分
  • 甲平行部分A
  • 甲順序部分
  • 甲平行部B
  • 甲順序部分

使用pthrea ds,我可以想辦法解決這個問題的兩種方法:

  1. 爲A部分創建N個線程,然後在部分A完成後破壞這些線程。然後爲B部分分配N個新線程。
  2. 使用可用的各種同步方法爲部件A和部件B使用相同的線程。

性能問題時需要多少開銷爲解決方案1創建新線程。我應該選擇解決方案1還是解決方案2?

回答

1

並行框架,如OpenMP回收線程。這稱爲線程池,您可以在網站上找到有關這些信息的信息。這裏有一個相關的文章:Thread Pool vs Thread Spawning

如果你真的關心性能,找出什麼適合你的應用程序的最好方法是嘗試兩種方法並測量它們。

一般來說,如果你的處理任務很昂貴,並且如果你只是產生新的線程,代碼更容易理解,那就這麼做。

只是爲了給論點塗一點顏色,看看這個帖子,我回答了前幾天使用實驗:Why are 50 threads faster than 4?