IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

Influence de l'accès à une variable interprocess sur le scheduling de 4D ?


Sujet :

4D

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 27
    Points : 46
    Points
    46
    Par défaut Influence de l'accès à une variable interprocess sur le scheduling de 4D ?
    Bonjour à tous,

    Ce problème peut facilement se résoudre à l'aide d'un sémaphore, mais la curiosité étant plus forte, je me pose la question existancielle suivante : on a une variable interprocess, par exemple un entier long nommée <>LaVariable. On considère la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <>LaVariable:=<>LaVariable-1
    Cette ligne de code est exécutée à partir du plusieurs process tournant simultanément, une seule fois par process et à des moments à priori aléatoire.

    Si je ne me trompe pas, 4D devrait donc effectuer les opérations suivantes :
    1 - Lire la valeur de <>LaVariable.
    2 - Soustraire 1 à cette valeur
    3 - Affecter la nouvelle valeur à <>LaVariable

    On est dans un environnement multiprocess, il est donc normal que le process puisse être suspendu entre le point 1 et le point 2, ou entre le point 2 et le point 3. Si lors de cette suspension, un autre process effectue le même code, on se retrouve avec le problème classique que le process qui s'est fait interrompre va calculer la nouvelle valeur à partir d'une valeur obsolète.

    Là où se pose le "problème", c'est que j'ai l'impression que la fréquence à laquelle l'interruption se fait juste après la lecture de <>LaVariable et juste avant son écriture est particulièrement élevée, comme si le fait de lire la variable "coûtait" au process, et faisait descendre son niveau de priorité par rapport aux autres process.

    Avez-vous déjà remarqué ce phénomène, ou est-ce simplement mon impression qui est faussée ? Qu'en pensez-vous ?

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    je viens de lire ta remarque sur la variable inter process.
    Malheureusement, je ne sais pas comment 4D gère les empilements de process, le basculement de process et l'accès mémoire à des variables communes.

    La seule solution est ce quelquesoit le langage dans lequel l'application est développée et de gérer comme tu le dis les sémaphores.

    J'ai déjà développé dans plusieurs langages et lu quelques livres sur les process en général et à chaque fois, il est fortement conseillé de gérer l'accès à des variables communes par des systèmes de blocage, car on ne sait jamais quand l'interruption process peut arriver.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    En compilé...

    <>LaVariable:=<>LaVariable-1

    ...sera atomique. Aucun autre process ne modifiera <>laVariable pendant l'exécution de cette ligne.
    Avec un bémol majeur : c'est parce que le scheduler de 4D est multiprocess, disons "en interne" seulement. En pratique, il ne s'agit pas de task/thread ou tout autre nom de processus dit "système". Tous les process 4D s'exécutent dans le même thread. J'ai dit que c'était un bemol parce qu'il est probable qu'une prochaine version de 4D change ça à l'avenir (note que le moteur de base de données v11, lui, est lumtitask/multicore, mais c'est autre chose).

    En interprété, il peut en théorie arriver qu'une instruction d'un autre process se glisse au milieu de l'exécutiond e la ligne, mais c'est super peu probable.

    EN tout état de cause, bien entendu, et comme déjà dit, il faut protéger l'accès par un sémaphore. S'il n'ya aucun accès aux données à protéger, alors utiliser un sémaphore local, ça n'aura aucun impact sur le serveur.

    Thibaud

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/02/2010, 00h16
  2. Problème d'accès à une variable
    Par khaled.mtibaa dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2006, 11h39
  3. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  4. [MFC] Accès à une base access sur le net
    Par LapinGarou dans le forum MFC
    Réponses: 4
    Dernier message: 21/03/2006, 12h11
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo