运行一个产生 N 个线程的进程或运行 N 个进程哪个更快?

运行一个产生 N 个线程的进程或运行 N 个进程哪个更快?

我需要在实验室服务器上运行大约 1500 个作业。我使用的程序(blastpgp如果有人关心的话)能够以并行模式运行,“-a”选项设置它将启动多少个线程。所讨论的服务器有 40 个 64 位 Opteron CPU 可用。

我有以下选择:

  1. 按顺序逐一运行作业,blastpgp通过启动 40 个线程来占用所有 40 个核心(-a 40)。

  2. 并行运行 40 个作业,每个作业只启动一个线程。

这两个选项中哪一个更快?它们等价吗?我想这可能取决于特定的硬件/软件/作业细节,但在集群上运行本机并行程序时是否存在一般规则?

答案1

我在 stackoverflow 上问了一个类似(不完全相同)的问题,普遍的共识似乎是多线程会更快,因为:

  1. 线程比进程更轻量,对系统的压力更小
  2. 线程意味着只启动一次程序,因此任何初始化任务只需执行一次。
  3. 操作系统在管理内存和调度方面通常比用户空间更好,因此最好启动多个线程并让操作系统对它们进行排序。

我将其标记为社区 wiki,因为它只是我在 stackoverflow 收到的答案的摘要。

相关内容