Multi-Thread

Bonjour,

Je profite du nouveau forum juste pour vous parler de la mise à jour de mon application en multi-thread, je dirais qu’elle s’étend sur 5 phases dont je viens de terminer la 3ème… C’est une application que j’ai démarré en 1998 qui fait ERP / CRM / CMS / Serveur Web, elle est utilisée en client / serveur chez certains clients et en serveur web aussi.

  1. Enlever les “.” dans les variables, et oui je fais de l’UI, je supporte pas l’underscore alors depuis 35 ans, j’utilisais des points pour classifier mes variables process. Pour les interprocess, les <> sont déjà tellement moches que je ne rajoutais pas de points… Bon ça s’est fait assez facilement sauf quelques mécanismes automatiques de nommage dans les méthodes formulaire, par exemple je mettais le nom de la variable à mettre à jour dans le nom de l’objet, des conneries comme ça.

  2. Supprimer les super-globales, alors déjà là, grosses questions, qu’est-ce que je fais des tableaux par exemple ? D’abord j’ai décidé de supprimer totalement les super-globales, j’ai créé un Storage ou j’ai mixé des variables classiques et des tableaux sous forme de collections, bon pas pratique pour stocker des tableaux synchronisés mais bon de toutes façons, c’est pas la bonne méthode, j’ai donc remplacer pas mal de superglobale par le Storage mais surtout pour aller vite au début. Les tableaux synchronisés super-globaux ou je stocke du cache ou des logs ou les process en cours, j’ai tout mis dans des workers, c’est génial les workers. Je n’ai pas pris le temps de bien faire les échanges entre les process fenêtres à l’écran puisque j’ai un process par enregistrement mais je le ferais plus tard, mon objectif c’est d’abord de rendre le serveur web multi-thread. J’ai décidé du coup de remplacer tout ce qui se faisait par sémaphore par des worker.

  3. Compiler en ayant coché “préemptif”. J’ai commencé par faire zéro plugin, à l’arrache en désactivant les fonctionnalités. J’ai démarré en étant optimiste mais ça m’a pris finalement 4-5 jours. J’ai même eu très peur de pas y arriver, finalement avec une petite modification je suis passé de 6000 erreurs à zéro. Je n’y ai pas cru, j’ai pensé que la compilation avait buggué… J’ai essayé de rendre le maximum de méthodes pré-emptives quitte à abuser des //%T-. J’étais content de voir qu’on peut appeler des Worker coopératif à partir des worker pre-emptif, c’est pas dis en clair dans la doc, elle parle toujours de dialoguer entre process pré-emptif, ca veut dire que je vais pouvoir utiliser des plug-in si besoin dans des workers. Alors les workers, j’ai principalement la gestion du cache, la gestion des logs, la gestion des fenêtres de progression, et un worker utilitaires ou je met tout ce dont j’ai besoin pour les process d’interface ou pour ne pas perdre la sélection ou l’enregistrement. Je vais aussi utiliser les worker pour les taches un peu longues comme les impressions et la fabrication des PDF et les fonctionnalités qui auraient besoin de plug-in.

  4. J’en suis là… Rebrancher les fonctionnalités que j’avais désactivé pour que la compilation aboutisse et ré-écrire quelques échanges interprocess en worker pour faire plus propre.

  5. Débuguer l’ensemble en testant le maximum, ça reste l’inconnu dans le temps que ca va prendre. Voir les soucis en client / serveur.

6… Une fois ces étapes terminées, notre serveur web devrait aller plus vite :slight_smile: ça sera plus propre et ça permettra de m’attaquer (ou pas) à WritePro ou j’hésite encore à me contenter d’éditeur JS en Web. C’est moins puissant mais peut-être suffisant.

Bons forums à tous :slight_smile:

2 Likes

Content du résultat du matin, ça fait plaisir de voir un ordinateur qui bosse à fond :slight_smile:
Même si c’est du monkey-clic sur un site web costaud.

1 Like

Salut Olivier,
bravo pour le travail et merci pour le partage d’expérience ! :smiley:

1 Like

Je vais même pouvoir partager du code, il est moins dépendant de l’environnement avec les Worker. je pense avoir bien abouti sur l’utilisation des worker, quelques méthodes génériques s’imposent… l’application la plus spectaculaire, c’est la simplification pour les barres de progression, je vais faire une petite base juste pour ça, ultra simple à utiliser et très efficace, ça permet d’avoir 10 process qui s’accumule dans le même dialogue avec 2 messages, une barre de progression, un bouton optionnel pour stopper le traitement.

1 Like