2012-06-21 44 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