2011-05-30 60 views
2

我正在運行一個非常好用的pthreads程序,但是我沒有看到我期望的加速。我懷疑我花了很多時間創建和銷燬我的線程。我應該使用靜態工作池還是動態工作池(線程)?

我沒有時間運行比我有cpus更多的線程。

在20分鐘的時間內,我創建了大約5000個線程。

我的問題是如果它是值得實施一個適當的靜態工作池,這樣我將只分配一個靜態數量的工人?

回答

1

首先,你應該測量你的應用程序花費所有時間的地方。每秒約有4或5個線程創建,這很多,但可能並不是你花費所有時間的地方。但是,如果你總是將自己限制在N個線程中,其中N是CPU的數量,那麼你應該預先創建N個線程,並安排工作以使用某種算法在每個線程上運行對你正在做的計算有意義。

+0

確實線程創建不是瓶頸。在低端系統上,創建線程大約需要30微秒。 20分鐘中的150000微秒沒有任何意義。 – 2011-05-30 05:04:05

+0

絕對檢查你的線程正在做什麼。您的CPU可能一次可以處理多條指令,但您的代碼與其他硬件/軟件的對話呢?例如,如果他們正在寫入單線程硬盤,那麼您將看不到性能提升。 – SlappyTheFish 2011-05-30 07:14:03

+0

是的,@SlappyTheFish說得很好。由於我們對問題空間一無所知,因此很難提供建議。但總體而言,檢查多線程程序中的資源爭用是找到瓶頸的好地方。 – 2011-05-30 19:02:06