Estou executando vários terminais cmds
usando threads em Python (não zombe de mim, há um motivo).
Às vezes, eles cmds
superam a memória disponível e fui forçado a aumentar o tamanho do swap para evitar erros de falta de memória (OOA).
Minha pergunta é:geralmente, meu (ou qualquer) programa será concluído mais rapidamente, reduzindo threads e aumentando o espaço de troca ou aumentando threads e reduzindo o espaço de troca (ou existe um "ponto ideal")?.
Responder1
Às vezes, esses cmds superam a memória disponível e fui forçado a aumentar meu tamanho de troca para evitar erros de falta de memória (OOA).
Ficar sem espaço de troca (ou ter que aumentar o tamanho da troca) indica que você está executando muitos processos ao mesmo tempo.
Minha pergunta é: geralmente, meu (ou qualquer) programa será concluído mais rapidamente, reduzindo threads e aumentando o espaço de troca ou aumentando threads e reduzindo o espaço de troca (ou existe um "ponto ideal")?
As duas opções realmente não fazem sentido. Se você aumentar o número de threads (e, portanto, a RAM necessária) e ao mesmo tempo reduzir o tamanho do swap, provavelmente ficará sem memória (armazenada na RAM e no swap), fazendo com que os processos sejam encerrados pelo seu sistema operacional e /ou falha na alocação de memória.
Ficar sem RAM faz com que o sistema operacional libere um pouco gravando memória no disco (espaço de troca). Esta é uma tarefa relativamente demorada, então você realmente deseja evitar o uso de mais memória do que a disponível em sua RAM.
Eu limitaria o número de processos para que você não ficasse sem RAM, para evitar gravar memória no disco. Verifique a memória disponível psutil.virtual_memory().available
antes de iniciar outro processo. Ter 1 GB antes de iniciar outro parece razoável.
Você deve fazer alguns benchmarking - calcule quanto tempo leva para concluir uma variedade de arquivos de origem diferentes, com valores diferentes para processos máximos e memória mínima antes de iniciar outro.