Menos threads ou mais espaço de troca?

Menos threads ou mais espaço de troca?

Estou executando vários terminais cmdsusando threads em Python (não zombe de mim, há um motivo).

Às vezes, eles cmdssuperam 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().availableantes 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.

informação relacionada