4D v16.3

Sobre Workers

Página Inicial

 
4D v16.3
Sobre Workers

Sobre Workers  


 

Um processo Worker é uma forma simples e poderosa de intercambiar informação entre processos. Esta funcionalidade se baseia em um sistema de mensagens assincrono que permite aos processos e formulários ser chamados e se lhes pede executar métodos com parâmetros em seu próprio contexto.

Nota: um método de projeto também pode ser executado com os parâmetros no contexto de todo formulário utilizando o comando CALL FORM.

Um worker pode ser "contratado" por qualquer processo (utilizando o comando CALL WORKER) para executar os métodos de projeto com parâmetros em seu próprio contexto, permitindo assim o acesso a informação compartida.

Esta funcionalidade responde as seguintes necessidades em matéria de comunicação entre processos em 4D:

  • já que são compatíveis com ambos processos cooperativos e preemptivos, são a solução perfeita para a comunicação entre processos nos processos preemptivos (as variáveis interprocesso não estão permitidas nos processos preemptivos).
  • Oferecem uma alternativa simples aos semáforos, que pode ser trabalhosos para definir e difíceis de usar (ver About semaphores).

Nota: embora tenham sido criados principalmente para a comunicação entre processos no contexto dos procesos preemptivos (só em versões 64 bits), CALL WORKER e CALL FORM estão disponíveis em versões 32 bits e  podem ser utilizadas com os processos cooperativos.

Um worker é usado para chamar um processo para que execute métodos de projeto. Um worker é feito de:

  • um nome único, também usado para nomear seu processo associado
  • um processo associado, que pode ou não existir em um dado momento
  • uma caixa de mensagem
  • um método de início (opcional)

(*) Aviso: os nomes dos Worker são sensíveis a maiúsculas e minúsculas ("myWorker" e "MyWorker" podem existir ao mesmo tempo).


Pode pedir a um worker para executar um método de projeto chamando o comando CALL WORKER. O worker e sua caixa de mensagem são criados no seu primeiro uso; seu processo associado é também automaticamente lançado no primeiro uso. Se o processo worker morrer logo depois, a caixa de mensagem permanece aberta e qualquer nova mensagem na caixa vai iniciar um novo processo worker.

A animação abaixo ilustra esta sequência:

Diferente do comando New process, um processo worker permanece vivo depois do final da execução do método de processo. Isso significa que todos os métodos de execução para o mesmo worker executarão no mesmo processo, que mantém todas as informações do estado dos processo (variáveis de processo, registros atuais, e seleção atual....). Consequentemente, métodos executados de maneira sucessiva acessarão, e distribuirão, a mesma informação, permitindo a comunicação entre processos. A caixa de mensagem do worker gerencia chamadas sucessivas de maneira assíncrona.

CALL WORKER encapsula tanto o nome do método quanto os argumentos de comando em uma mensagem que é postada em uma caixa de mensagem do worker. O processo worker então inicia se ainda não existir, e é pedido que execute a mensagem. Significa que CALL WORKER vai geralmente retornar antes que o método seja realmente executado (processamento é assíncrono). Por esta razão,CALL WORKER não retorna nenhum valor. Se necessitar que um worker envie de volta informação ao processo que o chamou (callback), necessita usar CALL WORKER novamente para passar ao caller a informação necessária. É claro que neste caso, o caller deve ser um worker.

Não é possível usar CALL WORKER para executar um método em um processo cirado pelo comando New process. Só processos worker tem uma caixa de mensagem e assim, podem ser chamados porCALL WORKER. Note que um processo criado por New process pode chamar um worker, mas não podem ser chamados de volta.

Processos Worker podem ser criados em 4D Server através de processos armazenados: por exemplo, pode usar o comando Execute on server para executar um método que chama o comando CALL WORKER

Um processo worker é fechado por uma chamada ao comando KILL WORKER, que esvazia a caixa de mensagem do worker, pede ao processo associado para parar o processamento de mensagens e para terminar a execução atual depois do fim da tarefa atual.

O método de startup é o método usado para iniciar o processo worker. Se KILL WORKER for chamado com um parâmetro vazio método, o método startup é automaticamente usado.

O processo principal criado por 4D quando abre um banco de dados para modos usuários e aplicação é um processo worker e pode ser chamado com CALL WORKER. Note que o nome do processo principal pode variar dependendo da linguagem de localização 4D, mas sempre tem número de processo 1; consequentemente é mais conveniente denominar por número de processo quando chamar CALL WORKER.

Todos os processos workers, exceto o processo principal, têm o tipo Worker process (5) que devolve o comando PROCESS PROPERTIES.

Novos ícones identificam os processos workers no Explorador de execução e na janela de administração de 4D Server:

Tipo de processoIcone
Processo worker apropriativo
Processo worker cooperativo

Nota: outros ícones de processo existentes foram atualizados em 4D v15 R5.

O gráfico abaixo mostra a sequência de comunicação entre dois workers e um formulário. Informações trocadas são apenas strings:

  1. Worker_1 chama Worker_2 e passa "Hello!" como parâmetro.
  2. Worker_2 recebe e lê a mensagem. Chama de volta  Worker_1 e passa "Hello!" como parâmetro.
  3. Worker_2 então chama o formulário MeuForm e passa "I work" como parâmetro. Inicia uma operação consumidora de tempo e seu estado muda para 'busy' (ocupado).
  4. Worker_1 chama Worker_2 duas vezes, mas, graças ao sistema de mensagem assícrono, as mensagens simplesmente entram na fila. Elas são processadas quando Worker_2 estiver disponível - depois que Worker_2 tiver chamado MeuForm. 



Ver também 


About semaphores
CALL WORKER
Current process name
KILL WORKER

 
PROPRIEDADES 

Produto: 4D
Tema: Processos (Comunicações)

 
HISTÓRIA 

Criado por: 4D v15 R5

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)