Linux中线程和进程的性能

时间:2018-06-23 00:19:46

标签: c++ linux

我在Linux中有两种情况,我已经在同一台机器上工作了一段时间。该机器有两个至强处理器,每个处理器具有8个内核和16个线程。

  1. 我在c ++中有一个与openmp并行化的代码。在这种情况下,如果我使用了所有线程(根据Linux内核,总共有32个线程),那么在线程之间的并发方面是否会有惩罚?我的意思是,对于这种情况,设置32个线程是最佳配置吗?

  2. 我使用相同的二进制文件运行给定数量的进程(所有单线程)。基本上,我有一个脚本,可以使用不同的输入文件生成相同的二进制文件。在这种情况下,启动这些进程而不耗尽机器的最佳方法是什么?我认为如果同时运行32个进程,将会损害计算机的性能。

1 个答案:

答案 0 :(得分:3)

  1. 对于受CPU限制的任务,最佳选择通常为16到32之间的值(hyperthreaded cores compete for the same resources);对于内存绑定甚至是IO绑定的任务,它甚至可以更低。

    不过,在大多数情况下,使用与内核一样多的线程是一个不错的起点。

  2. 为什么应该有害?在Linux中,线程只是碰巧共享虚拟地址空间(和大多数其他OS资源)的进程。如果您有足够的RAM使它们无需分页就可以运行,而每个进程都是单线程,则根据线程情况确定32是可以的。


  1. 请注意,对于等效的多线程程序,情况几乎相同,因为程序代码在应用程序的各个实例之间共享。