一个大进程或许多小进程的内存使用率更好吗?

Posted

技术标签:

【中文标题】一个大进程或许多小进程的内存使用率更好吗?【英文标题】:Is memory usage better with One Big Process or many small Processes? 【发布时间】:2012-12-24 07:36:33 【问题描述】:

我有一个需要大量内存的应用程序,它遍历一对数组,处理每个元素组合。目前这个脚本非常需要内存。它最终使用了大约 3GB 的 RAM。

我的问题是这样的:

在一个大进程中处理元素的每个组合是否更节省内存?还是为每个组合启动一个新的子流程更好。

换句话说,是不是最好做选项1:

for i in param_set1:
    for j in paramset2:
        Do_A_Big_Job(i, j)

或选项 2:

import subprocess

for i in param_set1:
    for j in paramset2:
        subprocess.call([Do_A_Big_Job_Script, i, j])

“更好”是指“使用更少的 RAM”。

谢谢!

编辑 我对内存使用情况非常好奇。当进程结束时,UNIX 系统会释放内存吗?对于合理编写良好的脚本,这是否比 python 的垃圾收集更有效?我没有很多可用的内核,所以我希望多个进程或多或少地并行运行。

【问题讨论】:

内存使用完全取决于您在“作业”(您分配和释放哪些变量)上所做的事情,而不是取决于您如何分配它们。如果每个作业都使用大量内存,则并行运行它们会产生内存堆栈。唯一的好处是它可能更快。 我会将其发布为答案,但我认为它不符合答案 xD 我只是想指出您可能一直在质疑错误的事情。您的编辑似乎是一个更精确的问题,值得等待了解该主题的人。顺便说一句,这将有助于添加一些标签,以使问题易于查找(如 UNIX、内存、子进程等) 【参考方案1】:

运行单个进程当然会使用更少的 RAM,但很难利用多个 CPU/内核。

如果您不在乎需要多长时间,请运行单个进程。

作为一种折衷方案,您可以一次只运行几个进程,而不是一次启动它们。

【讨论】:

以上是关于一个大进程或许多小进程的内存使用率更好吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以告诉 Windows 不要换出特定进程的内存吗?

DLL能被几个进程同时调用吗?

用不同的语言调用不同的子进程,最好是共享内存

如何获取进程的准确非共享物理内存使用情况

linux 怎样查看内存被哪个进程占用

我最好为我的进程保留内存吗?