多线程和多进程的性能差异

时间:2010-07-31 02:48:36

标签: c++ windows multithreading architecture multiprocess

几年前,在Windows环境中,我做了一些测试,让多个CPU计算实例密集+内存访问密集型+ I / O访问密集型应用程序运行。我开发了两个版本:一个在多处理下运行,另一个在多线程下运行。

我发现多处理的性能要好得多。我在其他地方读过(但我不记得该网站)。

这说明原因是在多线程下,他们正在为单个内存管道和I / O管道“战斗”,这使得与多处理相比性能更差

然而,我再也找不到那篇文章了。我想知道,直到今天,下面是否仍然适用?

  

在Windows中,拥有算法   代码在多处理下运行,有一个很高的   表演的机会   比多线程更好。

3 个答案:

答案 0 :(得分:5)

这取决于各种线程或进程(我将使用它们的集体术语“任务”)需要进行多少通信,特别是通过共享内存:这对于线程来说既简单又便宜,而且不是根本没有进程,所以,如果有很多进程,我打赌进程的性能将击败线程。

此外,进程(特别是在Windows上)开始时“更重”,因此如果发生大量“任务启动”,则线程可以轻松地在性能方面击败进程。

接下来,你可以拥有“超线程”的CPU,它可以非常快速地运行(至少)核心上的两个线程 - 但是,不是进程(因为“超线程”线程不能使用不同的地址空间) - 另一种情况是线程可以在性能方面获胜。

如果这些考虑都不适用,那么无论如何,比赛应该不比平局好。

答案 1 :(得分:1)

我不确定这句话甚至意味着什么。这非常接近废话。

进程内线程共享的主要内容是虚拟内存地址空间。

答案 2 :(得分:-2)

我发现这也是事实。但我认为它与调度有关。因为如果你运行它足够长,多进程就像多线程一样快。这个数字大约是10秒。如果算法需要运行10秒钟。多进程和多线程一样快。但如果只需要运行不到1秒钟。多进程比多线程快得多。