更少的线程还是更多的交换空间?

更少的线程还是更多的交换空间?

我正在使用 Python 中的线程运行多个终端cmds(不要取笑我,这是有原因的)。

这些cmds有时会超出可用内存,因此我不得不增加交换大小以避免内存不足(OOA)错误。

我的问题是:一般来说,通过减少线程和增加交换空间或增加线程和减少交换空间,我的(或任何)程序是否会完成得更快(或者是否存在“最佳点”)?

答案1

这些命令有时会超出可用内存,因此我不得不增加交换大小以避免出现内存不足(OOA)错误。

交换空间不足(或者必须增加交换大小)告诉我您同时运行了太多进程。

我的问题是:一般来说,通过减少线程和增加交换空间或增加线程和减少交换空间,我的(或任何)程序是否会完成得更快(或者是否存在“最佳点”)?

这两个选项实际上没有意义。如果您增加线程数(因此需要 RAM),同时减少交换大小,则可能会耗尽内存(存储在 RAM 和交换中),导致操作系统终止进程和/或内存分配失败。

RAM 耗尽会导致操作系统通过将内存写入磁盘(交换空间)来释放一些内存。这是一项相对耗时的任务,因此您确实需要避免使用比 RAM 中可用内存更多的内存。

我会限制进程数量,这样你就不会耗尽 RAM,从而避免将内存写入磁盘。psutil.virtual_memory().available在启动另一个进程之前,请检查可用内存。在启动另一个进程之前留出 1GB 内存似乎是合理的。

您应该进行一些基准测试 - 计算完成各种不同源文件所需的时间,在启动另一个源文件之前使用不同的最大进程数和最小内存值。

相关内容