Executando o programa com sleep vs schedule com o agendador de tarefas

0

Eu tenho um programa Java que deve verificar se um valor no banco de dados foi alterado a cada minuto. Se o valor tiver mudado, o programa executará uma tarefa.

Executar o programa a partir do cmd leva cerca de 7 segundos quando o programa verifica apenas o valor no banco de dados.

Qual é a melhor solução? Para agendar o programa com o Agendador de Tarefas a cada minuto ou ter o programa constantemente funcionando e dormindo por 1 minuto entre cada verificação? O agendamento com recursos do Agendador de Tarefas é exigente?

O SO é o Windows Server 2008R2.

    
por user1766169 04.01.2017 / 13:20

2 respostas

0

Quando você o executa agendado com o agendador, você está iniciando uma nova instância de programa a cada minuto.
E o novo programa tem que abrir e fechar o banco de dados toda vez. Isso consome mais recursos no servidor e no banco de dados do que um programa que continua em execução o tempo todo e pesquisa apenas a conexão do banco de dados (já aberta) uma vez por minuto para fazer a verificação. Por outro lado ... Um programa em execução contínua pode vazar lentamente memória ou outros recursos ao longo do tempo. E se o banco de dados, por algum motivo, ficar off-line / for inacessível enquanto o programa estiver em execução, ele deverá ser capaz de recuperar-se disso. O programa agendado obviamente não tem que lidar com isso.

Você pode ter desempenho de sistema suficiente para que não haja diferença perceptível no mater que variante você usa.

Então, isso realmente depende de todo o ambiente. Não posso fazer uma recomendação geral de "melhores práticas".

    
por 04.01.2017 / 13:33
0

Eu sei, por experiência própria, que o Agendador de Tarefas afeta o seu sistema, independentemente do script executado. O Agendador de Tarefas funciona muito bem para iniciar uma tarefa em segundo plano, mas não será executado a toda velocidade.

O próprio Agendador de Tarefas cria uma sobrecarga quanto mais intensivo estiver sendo usado e, por esse motivo, é altamente recomendável não usar o agendador de tarefas. Mesmo se você usasse o agendador de tarefas para iniciar a tarefa apenas uma vez e a tarefa se chamasse continuamente, haverá sobrecarga.

Então, em vez disso, recomendo usar um script de inicialização para ativar o loop e executar a verificação a cada minuto.

Você pode querer procurar outras maneiras de fazer isso, e você pode querer verificar se um intervalo de 5 minutos não é um grande compromisso.

Esse valor no banco de dados é alterado em algum lugar. Esse processo também não pode executar a ação ou iniciar um script no servidor?

    
por 04.01.2017 / 14:28