2012-06-21 63 views
1

我在Linux/gcc上使用pthread_create創建N線程。每個線程使用for (;;) printf(...)它的ID儘可能快地寫入,沒有別的。我讓整個程序運行3秒鐘,使用usleep並注意到在我的4-core CPU上當N=4它產生了大約1,000,000行,當它產生大約4倍的時候。在4核CPU 8線程表現更好的原因是什麼? CPU沒有啓用超線程。什麼是合適的線程數

+0

I/O操作,超線程,很多東西。 –

+0

@MarcoMariani不,超線程不可用。 – Cartesius00

+0

但您正在使用阻止I/O,對不對?所以你的線程在外設工作時處於空閒狀態,並且CPU正在等待它們 –

回答

2

I/O和CPU操作有很大不同。如果運行CPU密集型計算,則N =內核數量將是最優的。對於I/O,最佳數量可能會更高。

+0

+1。但是 - *「對於I/O,最佳數字可以更高。」* - 或者,它可以更低。真的取決於I/O吞吐量。 – ArjunShankar

+1

但是爲什麼最優數量的線程對於IO來說更高? – Ben

+0

假設您的I/O操作阻止了網絡套接字上的讀取操作。每個任務可以被阻塞幾秒鐘,但一旦數據到達,處理可以非常快。因此,您的機器可以處理比內核多得多的連接,但由於每個操作都被阻塞,因此需要大量線程來同時處理它們。 –

0

如果您擁有4thread,您將不會在每個核心上運行一個線程。 2線和8線都沒有。 多核心思想是將所取得的成果分開。此外,您只需顯示線程ID即可輕鬆實現CPU工作。因此,它不使用你的CPU容量,而是處理顯示事件的能力。

+0

「*你不會在每個核心上運行線程*」爲什麼不?如果將線程綁定到處理器,至少可以這樣做。 – Ben