Traitement parallèle et files d'attente d'objets
Traitement parallèle
Un programme classique est monolithique et s'exécute sur un unique processeur de la machine. De ce fait, lorsqu'un gros traitement est en cours, le programme n'est plus en mesure d'interagir librement avec l'utilisateur.
Avec Up ! 5GL, vous pouvez découper votre programme en plusieurs tâches s'exécutant en parallèle sur tous les processeurs de la machine. Celles-ci sont des objets modélisés par le type Tache.
De plus en fonction de leur nature, vous pouvez leur attribuer des priorités d'exécution différentes. Par exemple, une tâche gère l'interface homme-machine de l'applicatif alors que plusieurs autres tâches sont dédiées aux traitements de fond.
Pour que l'utilisateur puisse encore interagir librement avec le programme, la priorité de la tâche dédiée à l'interface aura une priorité supérieure.
Lors de l'emploi de multi-tâche, le gros problème en programmation classique est la gestion des collisions occasionnées lorsque deux algorithmes nécessitent de travailler sur les mêmes données. Up ! Object Request Broker gèrent automatiquement les accès concurrents aux objets en lecture ou en écriture.
Les tâches peuvent appartenir au même processus, à deux processus s'exécutant sur la même machine ou à deux processus s'exécutant sur deux machines distinctes. Up ! Object Request Broker synchronise les tâches au moyen des Inter Processus Call (IPC) adéquats.
Le traitement parallèle des objets est donc complètement automatisé. Lorsqu'il est nécessaire d'avoir des synchronisations fonctionnelles entre les tâches du programme, il est possible d'employer pour cela des objets du type Synchronisation.
Files d'attente
Les tâches exécutent un traitement s'apparentant à un sous-programme. Quand plusieurs tâches s'exécutent en parallèle, le temps processeur est réparti entre elles équitablement (si elles sont de même priorité). Il n'y a pas véritablement d'ordonnancement.
Pour gérer l'ordonnancement des tâches, il est nécessaire est d'employer une file d'attente du type file FileDAttente.
Une file d'attente permet à une tâche cliente d'y placer un travail de type Travail matérialisé par une procédure, une fonction ou méthode et ses paramètres nécessaires à l'exécution de l'appel. Ce travail peut comporter une contrainte temporelle d'exécution :
- Immédiat.
Il doit s'exécuter au plus tard avant une certaine date.
- Différé.
Il doit s'exécuter au plus tôt à partir une certaine date.
- Synchronisé.
Il doit attendre le résultat d'une ou plusieurs autres demandes. Celles-ci peuvent être dans de cette même file d'attente ou d'autres files d'attente.
- Periodique.
Il doit s'exécuter aux dates définies selon un calendrier. Les calendriers sont modélisés par le type Calendrier.
De plus ce travail peut comporter une priorité d'exécution.
A cette file d'attente est associée une ou plusieurs tâches la desservant. Le nombre varie en fonction du travail à fournir. Celles-ci prélèvent les travaux de la file et les exécutent. Le résultat du travail est alors sortie dans la file d'attente et il continue d'exister de la sorte que la tâche qui l'a déposé puisse venir le consulter.