Digamos que eu tenha um aplicativo CLI que quero fazer algum trabalho (por exemplo, processar alguns arquivos de mídia). Quando executo uma instância do aplicativo, é necessário 20% da CPU. Os 80% restantes estão ociosos.
Eu quero algum tipo de gerenciador de processos que execute quantas instâncias de aplicativos forem necessárias para usar quase toda a CPU. O aplicativo sabe o que fazer e como não interferir com seus irmãos, mas não pode gerar/gerenciar a si mesmo.
Existe algum gestor assim? Eu tenho usado o supervisor para executar conjuntos fixos de aplicativos diferentes uma instância cada, mas não sei se ele pode ser usado para executar uma quantidade variável de instâncias do mesmo aplicativo, dependendo da disponibilidade da CPU.
Para um exagero máximo, existe um software, como
HTCondor
se essas estruturas normalmente tivessem um alto custo de configuração e uma curva de aprendizado mais longa do que o seu caso pode precisar.Uma solução mais simples, mas menos flexível, seria escrever um pequeno script que verificasse a carga atual da CPU e, a partir disso, decidisse se
wait
um processo sairia ou geraria um ou mais trabalhos (e depoiswait
um processo sairia). Esse tipo de script é provavelmente de onde coisas comoHTCondor
evoluíram.Ainda mais simples pode ser ter um
Makefile
e depois usarmake -j 4 ...
onde se sabe que cada "trabalho" ocupa 20% - 25% da CPU. Isso pressupõe que você saiba quanta CPU os trabalhos ocupam e que conhece os trabalhos e pode listá-los todos em um arquivoMakefile
. Portanto, não é muito flexível, a menos que você gere oMakefile
de uma lista de trabalhos.