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

10
几年前,在Windows环境下,我进行了一些测试,让多个实例的CPU计算密集型+内存访问密集型+I/O访问密集型应用程序运行。我开发了两个版本:一个在多处理器下运行,另一个在多线程下运行。
我发现多处理性能要好得多。我在其他地方读到过(但我记不得网站了)。
其中一篇文章指出,原因是在多线程下,它们正在“争夺”单个内存管道和I/O管道,这使得性能比多处理更差。
然而,我再也找不到那篇文章了。直到今天,我想知道以下内容是否仍然成立?
在Windows中,如果算法代码在多处理器下运行,则性能很可能比多线程更好。
3个回答

7
这取决于各个线程或进程(我将使用集体术语“任务”来表示它们)需要通过共享内存进行通信的程度:对于线程而言,这很容易、便宜且快速,但对于进程则完全不是这样。因此,如果有大量通信发生,我敢打赌进程的性能肯定不会比线程好。
另外,进程(特别是在Windows上)启动起来比较“重”,因此如果出现了大量的“任务启动”,那么线程在性能方面可以轻松胜过进程。
接下来,你可以拥有支持“超线程”的CPU,它可以非常快速地运行(至少)两个线程在一个核心上——但不能运行进程(因为“超线程”线程不能使用不同的地址空间)——这又是线程在性能方面胜出的另一种情况。
如果没有这些考虑因素,则比赛的结果应该不会比平局更好。

1

我不确定这个引语的意思。它非常接近无意义。

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接