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

  1. #1
    Futur Membre du Club
    Messages queues - mon processus lit ses propres messages
    Bonjour,

    J'utilise des messages queues pour communiquer entre 2 processus (en me basant sur le très bon tuto http://fabrice-boissier.developpez.c...ction-posix-mq)

    Un processus A ecrit un message dans la queue(mq_send), un processus B lit ce message (mq_receive) puis effectue un traitement et puis envoie un nouveau message dans la queue qui sera lu par le processus A.

    Or, il arrive régulierement que le processus A envoie son message puis quand il se met en attente de réception du message de B, il lise son propre message (j'imagine que le processus B n'a pas eu le temps de prendre le message dans la queue).

    Y a-t-il un moyen d'éviter cela ?

    Est-ce que les mq ne sont pas adaptées dans mon cas ? dans ce cas, je pourrais utiliser des sockets (qui sont moins performant d'après ce que j'ai compris. je développe des applis temps réelles qui demandent une bonne réactivité).

    Merci pour votre aide.
    Fab

  2. #2
    Membre chevronné
    Oula non ! Pour autant que je sache, les sockets sont beaucoup plus rapides et surtout beaucoup plus simples a utiliser !

    Or, il arrive régulierement que le processus A envoie son message puis quand il se met en attente de réception du message de B, il lise son propre message (j'imagine que le processus B n'a pas eu le temps de prendre le message dans la queue).
    Il y a quelques annees je m'en etais servi pour un projet scolaire mais je n'avais pas rencontre ce probleme... Ca me parait bizarre... Je sais que je devais notifier mon programme pour qu'il aille ensuite lire le message. Je cherche comment je faisais et je te poste ca des que j'ai retrouve.

    EDIT: les messages queue sont plus rapides, erreur de ma part. Ce lien donne un apercu des differences de performance.
    Il y a 10 sortes de gens : ceux qui comptent en binaire et les autres.

    "Premature optimization is the root of all evil" --Donald Knuth
    traduction : "L'optimisation prématurée est la racine de tous les maux" -- Donald Knuth

    Si vous voulez apprendre à développer en Rust, un tuto (en français) est disponible ici.
    Si vous voulez voir mes projets, c'est sur github que ça se passe.

  3. #3
    Expert éminent
    Je n'ai pas de connaissances sur les sockets pour apporter un avis dessus.

    Par contre pour les messages queue il est possible de faire ce que tu veux.
    Mais c'est beaucoup moins performant que d'utiliser deux messages queue.
    Le cas de la message queue bidirectionnelle est très rarement utilisé.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  4. #4
    Futur Membre du Club
    -
    les mq ne passent pas parles routines réseaux, elles sont par définition plus rapide.

    je pense que je vais passer par 2 mq finalement.

    Merci à tous.