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 múltiplo thread ou concorrente. Um objeto ativo é um objeto que implementa um mecanismo para que ele possa receber e processar a entrada de objetos externos sem forçar os objetos externos a aguardar a execução. Esse mecanismo também permite que muitos objetos que possam estar em execução simultaneamente use objetos ativos sem a possibilidade de longos tempos de bloqueio em que os processos simultâneos devem parar e aguardar o acesso. Isso é alcançado com mais frequência envolvendo os objetos ativos em uma interface acessível ao público, chamado proxy e, em seguida, 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 continuam seu processamento até que o objeto ativo processe a mensagem e mais tarde informeos objetos de chamada dos resultados para que possam atualizar seus estados de acordo.
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 um relé de servidor de bate -papo, no qual objetos remotos entram em contato com o objeto passivo para transmitir uma mensagem a todos os outros no servidor. Sempre que o objeto de servidor passivo receber uma mensagem de bate -papo de um objeto remoto, ele deve lidar com 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 feito, um efeito conhecido como bloqueio. Criar tópicos diferentes dentro do programa pode resolver o problema do bloqueio de execução, mas depois 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 tópico separado dooutros objetos. Ele também seria envolvido em algum tipo de interface conhecida como proxy que também está em execução em um encadeamento separado, às vezes o principal thread 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 a ele todas as informações necessárias e depois retorna ao seu estado de execução normal em vez de esperar.
A interface proxy converte as informações do objeto remoto em uma mensagem que passa para uma fila para o objeto ativo processar. Neste ponto, tanto a interface proxy quanto o objeto remoto são livres para continuar executando e não estã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 devolvidas pelo objeto ativo, uma estrutura de retorno de chamada poderá ser usada para informar o objeto remoto de qualquer alteração no estado.