O que é um objeto ativo?
Na programação e engenharia de computadores, um objeto ativo é um tipo de padrão de design que pode ser usado para ajudar a garantir que algum serviço esteja sempre disponível em um sistema multithread ou simultâneo. Um objeto ativo é um objeto que implementa um mecanismo para poder receber e processar entrada de objetos externos sem forçar os objetos externos a aguardar a conclusão da execução. Esse mecanismo também permite que muitos objetos em execução simultânea usem objetos ativos sem a possibilidade de longos períodos de bloqueio nos quais os processos simultâneos devem parar e aguardar acesso. Isso é obtido com mais freqüência agrupando os objetos ativos em uma interface acessível ao público, chamada proxy, e implementando um tipo de sistema de filas dentro dos objetos, para que as mensagens sejam armazenadas para processamento posterior. Isso cria um padrão de design no qual os objetos enviam mensagens para objetos ativos e, em seguida, continuam seu processamento até que o objeto ativo processe a mensagem e depois informe os objetos de chamada dos resultados para que eles possam atualizar seus estados adequadamente.
Fora de um padrão de design de objeto ativo, um objeto normal pode ser chamado de objeto passivo. Em um exemplo simples de programa, um objeto passivo pode estar atuando como uma retransmissão do servidor de bate-papo, na qual objetos remotos entram em contato com o objeto passivo para transmitir uma mensagem a todos os outros no servidor. Sempre que o objeto passivo do servidor recebe uma mensagem de bate-papo de um objeto remoto, ele deve tratar a solicitação imediatamente e enviar imediatamente a saída, enquanto o objeto remoto interrompe sua própria execução até que o processo seja concluído, um efeito conhecido como bloqueio. A criação de diferentes threads no programa pode resolver o problema de bloqueio de execução, mas inicia problemas com a sincronização.
Em um padrão de design de objeto ativo, o mesmo objeto de servidor no exemplo acima estaria em execução em seu próprio encadeamento separado dos outros objetos. Também seria envolto em algum tipo de interface conhecida como proxy que também está sendo executada em um encadeamento separado, às vezes o encadeamento principal de execução do programa. Quando um objeto remoto deseja que o objeto do servidor envie uma mensagem de bate-papo, ele entra em contato com o objeto proxy, passa para ele todas as informações necessárias e depois retorna ao seu estado normal de execução, em vez de esperar.
A interface do proxy converte as informações do objeto remoto em uma mensagem que passa para uma fila para o objeto ativo processar. Nesse ponto, a interface do proxy e o objeto remoto estão livres para continuar executando e não são bloqueados. Enquanto isso, o objeto ativo trabalha para manter a fila vazia, processando cada mensagem recebida. Se o objeto de chamada exigir que algumas informações sejam retornadas pelo objeto ativo, uma estrutura de retorno de chamada poderá ser usada para informar o objeto remoto sobre qualquer alteração no estado.