我正在Python中使用線程運行多個終端cmds
(不要取笑我,這是有原因的)。
這些cmds
有時會超過可用內存,我被迫增加交換大小以避免內存不足 (OOA) 錯誤。
我的問題是:一般來說,透過減少線程和增加交換空間或增加線程和減少交換空間(或者是否有“最佳點”),我的(或任何)程式會更快完成嗎?。
答案1
這些命令有時會超過可用內存,我被迫增加交換大小以避免內存不足 (OOA) 錯誤。
交換空間用完(或必須增加交換大小)告訴我您同時運行了太多進程。
我的問題是:一般來說,透過減少線程並增加交換空間或增加線程並減少交換空間(或者是否存在“最佳點”),我的(或任何)程式會更快完成嗎?
這兩個選項其實沒什麼意義。如果增加執行緒數量(因此需要 RAM),同時減少交換大小,則可能會耗盡記憶體(儲存在 RAM 和交換中),導致進程被作業系統終止,並且/或記憶體分配失敗。
RAM 耗盡會導致作業系統透過將記憶體寫入磁碟(交換空間)來釋放一些記憶體。這是一項相對耗時的任務,因此您確實希望避免使用超出 RAM 可用記憶體的記憶體。
我會限制進程的數量,這樣就不會耗盡 RAM,以避免將記憶體寫入磁碟。psutil.virtual_memory().available
在啟動另一個進程之前檢查可用記憶體。在開始另一個之前擁有 1GB 似乎是合理的。
您應該做一些基準測試 - 計算完成各種不同來源檔案所需的時間,最大進程和最小記憶體的值不同,然後再開始另一個檔案。