Forum Programmation.perl threads - fork() ...

Posté par  (site web personnel) .
Étiquettes : aucune
0
6
juil.
2004
Bonsoir,

J'aimerais trouver un moyen pratique, portable de faire du multitache en perl ... J'ai testé les threads et fork() qui semble être porté sous Fenêtres(R) mais ...
- fork() me permet d'envoyer des signaux aux processus
- les threads me permettent de partages des données facilement (files, variables partagées, vérous, sémaphores)
- les threads fonctionnent partout
- Mon application utilisant les threads à la place de fork() était plus lente (peut être car j'avais ajouté des fonctionnalités)

J'aimerais donc trouver un moyen de:

cas A:
- pouvoir envoyer des signaux aux threads

ou,
cas B:
- pouvoir partager des variables entre différents processus
- pouvoir utiliser des sémaphores, vérous et autres files d'attentes.
- savoir si fork() est vraiment compatible (Windows, Unix, MacOS 9, ...)

J'aurais une petite préférence pour fork() si jarrive a bien l'utiliser même si il y a une limite à 64 processus sous Windows car mon application était plus rapide (mais buggait car des variables que je croyait partagées ne l'étaient pas).
La différence est assez saisissante. D'un coté le message de bienvenue s'affiche immédiatement. De l'autre, je dois attendre près d'une seconde (c'est peut être car j'ai mis sleep(60) dans un thread pour générer un message toutes les minutes.)

Merci de m'éclairer
Mildred
  • # mon avis à moi rien qu'à moi

    Posté par  (site web personnel) . Évalué à 1.

    Personnellement, j'ai une net préférence pour utiliser les threads (pour aux données plus facile mais surtout attention aux accès concurrents .... faut pas hésiter à mettre des mutex)

    Attention le sleep dans pthread se fait normallement en milliseconde .... rien à voir avec la commande console qui elle est en secondes!!!!

    pour la rapidité ... tout dépend de l'ordonnencement de l'OS ....

    utilise la libpthread ... ca marche sous linux, windows sans modif à la compile!
    • [^] # Re: mon avis à moi rien qu'à moi

      Posté par  (site web personnel) . Évalué à 1.

      Merci .. je vais chercher dans cette direction ...
      Mais n'y a il pas moyen d'envoyer un signal à un thread pour éviter qu'il reste bloqué sur une instruction ...
      Par exemple, dans mon programme, lorsque je le quitte, il y a un thread qui attend une connexion d'un client. Et pas moyen de demander au thread de quitter quand même, il reste bloqué jusqua ce que je connecte un client ou alors que je fasse Ctrl-C ...

      Sinon, pour sleep, c'est bien en secondes car la boucle suivante me permet dafficher un message toutes les minutes:

      while($life){
      sleep(60);
      [...]
      }

      Mildred
      • [^] # Re: mon avis à moi rien qu'à moi

        Posté par  (site web personnel) . Évalué à 2.

        J'ai pas fait grand chose avec les threads et c'était en C donc je vais peut-être dire des bêtises mais il me semble que la notion de thread est indépendante de celle de process (même si l'implémentation Linux génére en fait un process par thread) et on ne peut envoyer un signal qu'à un process, donc il est logique qu'on ne puisse pas envoyer un signal à un thread. Par contre tu peux demander à un thread de s'arréter avec pthread_cancel(). Après tu fais ce que tu veux avec une fonction que tu as passé à pthread_cleanup_push() dans le dit thread par exemple. Enfin tout ça c'est pour les threads POSIX en C, je sais pas si c'est implémenté comme ça en Perl.

        http://www.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html(...)

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.