2013-04-23 72 views
0

我使用(HANDLE)_beginthreadex()創建了一個C++窗口控制檯應用程序,其中使用x處理程序線程控制了1000個工作線程。C++中的線程控制檯應用程序

最初我以爲1000處理程序線程會導致最快的時間,但經過測試後,我發現使用100個處理程序線程會得到最快的時間。 該測試是在一個四核英特爾i7處理器(支持超線程)上進行的

我不知道該寫些什麼來解釋爲什麼這個線程數目會導致最佳性能。由於我的處理器只能同時處理8個線程,我以爲8會是最好的性能。

我正在寫一個關於應用程序的小報告,並且必須確定導致最佳性能的線程數量並解釋爲什麼會出現這種情況。

+0

這是值得注意的這個答案http://stackoverflow.com/questions/12124586/make-two-thread-in-two-different-core-in-c,你還沒有測試過它是如何當這些線程的百分比*實際上*分佈在不同的內核上...... – 2013-04-23 20:19:20

回答

3

您希望一次有8 活動線程理想。有8個原因可能不是理想數字的原因有很多,但是您的線程工作不受CPU限制。如果在這種情況下你的線程太少,那麼你會浪費時間,而太多的話當然會造成不必要的爭用 - 並且可能導致太多的上下文切換。

+1

IOW,剖析應用程序以查看線程正在等待非CPU工作完成的位置。 (+1) – usr 2013-04-23 20:27:33

+0

在我的應用程序中,我首先啓動我的1000個工作線程,然後我的處理程序線程第二個,它們的啓動順序是否重要?如果處理程序線程先啓動並準備好在完成任務時處理工作線程,程序是否會運行得更好? – Split 2013-04-23 20:47:17

+0

一旦你經歷了一些口吃,操作系統調度程序將佔主導地位,所以幾秒鐘後可能無所謂。當然,唯一可以確定的方法是進行配置。 – Joel 2013-04-24 02:27:50