Partage d’informations dans un environnement multithreading

Traduit automatiquement de Deepl

4D v16 R6 introduit un nouveau concept de communication entre les processus : les variables d’objets et de collections partagées! Elles sont une solution pour éviter d’utiliser les variables interprocessus (qui ne peuvent pas être utilisées en mode multithread). Grâce à cela, vous pourrez facilement partager des informations entre des processus préemptifs.

Exemple de base de données

Nouveau concept : objets partagés / collections

Dans le monde de la programmation informatique, quand on a besoin de performances, moins on partage de données, plus on est efficace. Mais bien sûr, dans la plupart des cas, les processus que vous avez créés doivent communiquer ensemble. Que ce soit pour envoyer des paramètres, pour obtenir des résultats ou simplement pour accéder à des informations partagées. C’est la raison pour laquelle les objets partagés et les collections partagées ont été créés ! (Rappelez-vous que les objets et les collections ordinaires ne peuvent pas être partagés entre les processus. Lorsqu’ils sont passés en paramètre, une copie des objets est créée).

Lesobjets partagés et les collections partagées se comportent exactement comme les objets standards, sauf qu’ils doivent être déclarés comme « partagés » lors de leur instanciation avec les nouvelles commandes suivantes : Nouvel objet partagé et Nouvelle collection partagée. Une fois instanciés, ils peuvent être utilisés directement, comme tous les autres, pour la lecture. Aucun sémaphore ou autre n’est nécessaire, il suffit d’utiliser les objets partagés.

Pour écrire ou modifier, les objets partagés doivent être entourés des mots-clés Use et End use. Ces mots-clés définissent des sémaphores internes et doivent être utilisés pour accéder au contenu des objets et des collections en mode écriture. L’utilisation de ces mots-clés est vraiment facile, beaucoup plus facile que les sémaphores du langage 4D. Comment cela ? Vous ne pouvez pas oublier de les libérer. Use et End use entourent toujours les variables, vous ne pouvez donc pas oublier de libérer le verrou.

$object:=New shared object
$ps:=New process("my process";0 ; "myprocess";$object) // envoyé comme référence
Use ($object)
$object .myAttribute:=10
End use

Comment les utiliser dans d’autres processus ?

Vous vous demandez peut-être Comment puis-je utiliser un objet partagé d’un autre processus (autrement qu’en envoyant un paramètre) ? Comment puis-je partager sans variables interprocessus ?

Un objet « super-partagé » résout ce problème. Une nouvelle commande, Storage, donne accès à cet objet, pour tous les processus en cours d’exécution.

Cet objet est unique sur chaque machine. Un seul (en mode mono-utilisateur), sinon un par client et un sur le serveur. La commande Storage renvoie l’objet partagé afin qu’il puisse être manipulé comme tout autre objet partagé, mais il ne peut contenir que des objets partagés ou des collections partagées. (Notez que les composants peuvent également contenir leur propre Storage )

Use (Stockage)
Storage .maCollection:=New shared collection
End use

Avantages

Lesobjets partagés et les collections partagées présentent de nombreux avantages par rapport aux variables interprocessus standard, tels que :

  • aucun besoin de protection lors de la lecture : accès rapide
  • les mots-clés Use et End Use évitent les erreurs de codage entraînant des scénarios de blocage
  • comme les objets ou les collections sont généralement hiérarchisés (ils contiennent d’autres objets ou collections), en verrouillant un objet, vous verrouillez toute la chaîne en une seule fois, ce qui améliore les performances.

Vous vous habituerez rapidement aux objets et collections partagés et cela deviendra une façon naturelle de programmer 🙂

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.