Partilha de informação em ambiente multi-tarefas

Tradução automática de Deepl

4D v16 R6 introduz um novo conceito de comunicação entre processos: objecto partilhado e variáveis de colecção partilhadas! São uma solução para que se possa evitar a utilização de variáveis interprocessadas (que não podem ser utilizadas em modo multi-tarefa). Graças a isto, poderá facilmente partilhar informação entre processos preventivos.

Exemplo de base de dados

Novo conceito: objectos partilhados / colecções

No mundo da programação informática, quando se precisa de desempenho, quanto menos se partilham dados, mais eficiente se é. Mas, claro, na maioria dos casos, os processos que criou devem comunicar em conjunto. Seja para enviar parâmetros, para obter resultados ou simplesmente para aceder a alguma informação partilhada. Esta é a razão pela qual foram criados objectos e colecções partilhadas! (Basta lembrar que os objectos e colecções regulares não podem ser partilhados entre processos. Quando estes são passados como parâmetros, é criada uma cópia dos objectos).

Os objectos partilhados e as colecções partilhadas comportam-se exactamente como os normais, excepto que devem ser declarados como “partilhados” durante a sua instanciação com os novos comandos seguintes: Novo objecto partilhado e Nova colecção partilhada. Uma vez instanciados, podem ser utilizados directamente, como qualquer outro, para a leitura. Não é necessário semáforo ou qualquer outra coisa, apenas usar os objectos partilhados.

Para escrever ou modificar, os objectos partilhados devem ser rodeados pelas palavras-chave Use e End use. Estas palavras-chave definem semáforos internos, e devem ser utilizadas para aceder ao conteúdo de objectos e colecções no modo de escrita. A utilização destas palavras-chave é realmente fácil, muito mais fácil do que os semáforos em linguagem 4D. Como assim? Não se pode esquecer de as libertar. O uso e o uso final envolvem sempre as variáveis, pelo que não se pode esquecer de libertar o cadeado.

$object:=New shared object
$ps:=New process("my process";0; "myprocess";$object) // enviado como referência
Use ($object)
$object .myAttribute:=10
End use

Como utilizá-los noutros processos?

Poderá estar a perguntar-se: Como posso utilizar um objecto partilhado de outro processo (de outra forma que não seja o envio de um parâmetro)? Como posso partilhar sem variáveis interprocessadas?

Um objecto “super-compartilhado” resolve isto. Um novo comando, Armazenamento, dá acesso a este objecto, para todos os processos em execução.

Este objecto é único em cada máquina. Um (em modo Single User), caso contrário um por cliente e um no servidor. O comando Armazenamento devolve o objecto partilhado para que possa ser manipulado como qualquer outro objecto partilhado, mas só pode conter objectos partilhados ou colecções partilhadas. (Note-se que os componentes podem conter Armazenamento também o seu próprio)

Use (Armazenamento)
Storage .myCollection:=New shared collection
End use

Benefícios

Objectos partilhados e colecções partilhadas têm muitas vantagens em comparação com variáveis interprocessadas padrão, tais como:

  • sem necessidade de protecção na leitura: acesso rápido
  • Uso e Uso Final Palavras-chave evitar erros de codificação resultando em cenários de impasse
  • porque os objectos ou colecções são geralmente hierárquicos (contendo outros objectos ou colecções), ao bloquear um objecto bloqueia-se toda a cadeia de uma só vez, melhorando o desempenho.

Habituar-se-á rapidamente a objectos e colecções partilhados e tornar-se-á uma forma natural de programação 🙂

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.