我知道这个问题很老,但是从2009年开始事情就有了变化。
现在有两件事要考虑:内核的数量和每个内核内可以运行的线程数。
对于Intel处理器,线程数是由超线程定义的,只有2个线程(如果可用的话)。但是超线程将您的执行时间减少了两个,即使不使用两个线程!(即在两个进程之间共享一个管道-当您有更多进程时,这是很好的,否则就不太好了。更多的核心肯定会更好!)
在其他处理器上,您可能有2个、4个甚至8个线程。因此,如果您有8个内核,每个内核都支持8个线程,那么您可以有64个进程并行运行,而不需要上下文切换。
“没有上下文切换”显然是不正确的,如果您运行的是一个标准的操作系统,它将为您无法控制的所有其他事情进行上下文切换。但这是主要想法。有些操作系统允许您分配处理器,因此只有您的应用程序可以访问/使用所述处理器!
根据我自己的经验,如果您有大量的I/O,多线程是很好的。如果您有很大的内存密集型工作(读源1,读源2,快速计算,写),那么有更多的线程是没有帮助的。同样,这取决于您同时读写的数据数量(例如,如果您使用SSE 4.2和读取256位值,那么所有线程都会停止它们的步骤.换句话说,1线程的实现可能要容易得多,如果不是更快的话,它可能会更快。这将取决于您的进程和内存体系结构,一些高级服务器为不同的核心管理不同的内存范围,因此如果您的数据被正确归档,单独的线程将更快.这就是为什么在某些体系结构上,4个进程的运行速度要快于4个线程的一个进程。)