更少的執行緒還是更多的交換空間?

更少的執行緒還是更多的交換空間?

我正在Python中使用線程運行多個終端cmds(不要取笑我,這是有原因的)。

這些cmds有時會超過可用內存,我被迫增加交換大小以避免內存不足 (OOA) 錯誤。

我的問題是:一般來說,透過減少線程和增加交換空間或增加線程和減少交換空間(或者是否有“最佳點”),我的(或任何)程式會更快完成嗎?

答案1

這些命令有時會超過可用內存,我被迫增加交換大小以避免內存不足 (OOA) 錯誤。

交換空間用完(或必須增加交換大小)告訴我您同時運行了太多進程。

我的問題是:一般來說,透過減少線程並增加交換空間或增加線程並減少交換空間(或者是否存在“最佳點”),我的(或任何)程式會更快完成嗎?

這兩個選項其實沒什麼意義。如果增加執行緒數量(因此需要 RAM),同時減少交換大小,則可能會耗盡記憶體(儲存在 RAM 和交換中),導致進程被作業系統終止,並且/或記憶體分配失敗。

RAM 耗盡會導致作業系統透過將記憶體寫入磁碟(交換空間)來釋放一些記憶體。這是一項相對耗時的任務,因此您確實希望避免使用超出 RAM 可用記憶體的記憶體。

我會限制進程的數量,這樣就不會耗盡 RAM,以避免將記憶體寫入磁碟。psutil.virtual_memory().available在啟動另一個進程之前檢查可用記憶體。在開始另一個之前擁有 1GB 似乎是合理的。

您應該做一些基準測試 - 計算完成各種不同來源檔案所需的時間,最大進程和最小記憶體的值不同,然後再開始另一個檔案。

相關內容