我正在使用 Python 中的线程运行多个终端cmds
(不要取笑我,这是有原因的)。
这些cmds
有时会超出可用内存,因此我不得不增加交换大小以避免内存不足(OOA)错误。
我的问题是:一般来说,通过减少线程和增加交换空间或增加线程和减少交换空间,我的(或任何)程序是否会完成得更快(或者是否存在“最佳点”)?。
答案1
这些命令有时会超出可用内存,因此我不得不增加交换大小以避免出现内存不足(OOA)错误。
交换空间不足(或者必须增加交换大小)告诉我您同时运行了太多进程。
我的问题是:一般来说,通过减少线程和增加交换空间或增加线程和减少交换空间,我的(或任何)程序是否会完成得更快(或者是否存在“最佳点”)?
这两个选项实际上没有意义。如果您增加线程数(因此需要 RAM),同时减少交换大小,则可能会耗尽内存(存储在 RAM 和交换中),导致操作系统终止进程和/或内存分配失败。
RAM 耗尽会导致操作系统通过将内存写入磁盘(交换空间)来释放一些内存。这是一项相对耗时的任务,因此您确实需要避免使用比 RAM 中可用内存更多的内存。
我会限制进程数量,这样你就不会耗尽 RAM,从而避免将内存写入磁盘。psutil.virtual_memory().available
在启动另一个进程之前,请检查可用内存。在启动另一个进程之前留出 1GB 内存似乎是合理的。
您应该进行一些基准测试 - 计算完成各种不同源文件所需的时间,在启动另一个源文件之前使用不同的最大进程数和最小内存值。