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

Modules Perl Discussion :

Thread Perl (urgentissime :) )


Sujet :

Modules Perl

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Thread Perl (urgentissime :) )
    Bonjour à tous,

    Je programme actuellement un script perl sur un linux embarqué. Je suis sur une plateforme ARM. Le script perl que je programme fait appel à une dizaine de modules (pm) que j'ai créer. Le script perl permet de lancer différents traitements sous forme de threads. Je souhaiterai lancer une trentaine de threads. Or étant sur un linux embarqué, je dispose que de 16Mo de mémoire (extensible à 32Mo). Mon script perl de base contient l'ensemble des bibliothèques que j'ai crée (ce qui fait beaucoup de code-> beaucoup de variables et beaucoup de fonctions).Lorsque je lance plus d'une dizaine de threads en parallèle ça plante (out of memory) puisque en perl pour chaque thread lancée, une copie de toutes les variables et données du thread parent doive être faite.
    Donc ce que je souhaiterai faire, c'est de réduire la taille de mes threads perls.
    Plusieurs questions:
    J'utilise use pour exporter les modules: l'espace de nommage de chaque module s'évère grand. Est ce qu'il est pas préférable d'utiliser require pour que les threads ne duplique pas un espace de nommage trop élevé?
    Est ce que le fait d'écrire certaines fonctions de mes modules en C me fera gagner de la taille au niveau des threads? si j'écris les fonctions en C, il faudra au final que je l'ai charge avec dynaloader et que j'exporte le nom des fonctions C dans mon programme perl.
    J'ai essayé perlcc mais j'ai des problèmes à la compilation et il s'évère instable.
    Existe il un autre langage interprété qui utilise de façon propre les threads parce qu'en perl ça ressemble plus à du bidouillage qu'à autre chose.
    Existe il des méthodes pour optimiser un code en perl?

    Merci par avance
    JB

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Première question : Pourquoi utilises-tu les threads ? Etant donné que tu as 16 MO de mémoire vive, j'ai un doute sur le fait que tu ais plusieurs processeurs, donc les threads ne t'apporte aucun avantage de vitesse, as-tu vraiment besoin de faire ces traitements en même temps, utilises-tu des ressources partagés, coordonnes-tu ces threads ?

    Autre chose, comment utilises-tu tes modules ? Les utilises-tu tous dans tous les threads ? Y a-t-il des états privés à un module susceptible d'être partagé entre les threads ?
    Utilises-tu des objets ?
    (utiliser require plutôt que use est une bonne pratique dès lors qu'on manque de place ou de temps de toute façon. Utiliser Autoloader si on n'emploie qu'une partie d'un module est également une bonne idée, les réécrire en XS est toujours un échange de temps de développement contre une vitesse accrue et un encombrement en mémoire diminué, tout dépend en premier lieu de ton expérience avec XS et l'API Perl)

    Tu peux aussi aller jeter un coup d'oeil sur le sujet sur l'optimisation, en haut du forum, néanmoins ton problème me semble plus proche d'un problème de conception : je ne pense pas qu'il soit raisonnable d'espérer qu'un langage interprété puisse travailler avec une trentaine de threads sur 16 Mo de RAM (avec une partie déjà occupé par l'OS j'imagine... De quel OS s'agit-il d'ailleurs ?)

    --
    Jedaï

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon alors, je suis obligé de lancer des threads car je dois effectué plusieurs taches en même temps.
    Les modules sont inclus dans le .pl de base: en fait j'ai une fonction (définit dans un .pm) qui permet de lancer sous forme de threads, des fonctions définit dans le .pl (ça c'est pour résumer le principe).
    Pour l'OS: Je suis sur un linux embarqué 2.6.11 (linux embarqué crée), noyau ARM.

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Qu'est-ce que tu cherches à faire ?

    --
    Jedaï

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En fait j'ai une fonction qui polle une liste de fifo sous linux. Lorsque je reçois un truc dans une des fifos, j'identifie la fifo et je lance sous forme de thread une fonction qui gère le contenu de la fifo. Chaque fifo à sa propre fonction. à la rigueur le multithread n'est pas indispensable, mais le multitache oui: je vais regarder du côté de POE pt.

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par superjb66
    En fait j'ai une fonction qui polle une liste de fifo sous linux. Lorsque je reçois un truc dans une des fifos, j'identifie la fifo et je lance sous forme de thread une fonction qui gère le contenu de la fifo. Chaque fifo à sa propre fonction. à la rigueur le multithread n'est pas indispensable, mais le multitache oui: je vais regarder du côté de POE pt.
    Excellente conclusion, j'allais te proposer du POE moi-même. C'est une bien meilleure solution que les threads dans l'état actuel des choses.

    --
    Jedaï

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    salut,

    J'ai regarder POE. Bon j'ai réussi à compiler les biblios pour ARM. Par contre, j'aimerai savoir si une fois qu'on a ouvert une session pour gérer les taches à effectuer, il est possible d'en rajouter une de façon dynamique. En fait, je fait un select qui polle une dizaine de fifos. Le select est bloquant et lorsque je reçois qqch dans une fifo, je recherche celle qui a sautée et je lance un traitement. Pour chaque fifo, j'ai un traitement. Bon admettons que j'ouvre une session POE que je mette comme tâches les différents fonctions faisant le traitement. La fifo saute une fois: je lance le multitache (->run). Juste après j'ai la fifo qui saute à nouveau. Comment pourrai je faire pour indiquer à la session EN COURS qu'il y a un nouveau traitement à faire et d'insérer la fonction de traitement dans la liste des taches.
    Bon je sais pas si j'ai été trop clair :o)

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Essaie de lire ce tutorial :
    http://perl.com/pub/a/2004/07/22/poe.html?page=1
    Je pense que ton problème devrait pouvoir être réglé par une petite Wheel.
    (NB : la première partie de ce tutorial est là : http://perl.com/pub/a/2004/07/02/poeintro.html mais je ne pense pas que tu en ais besoin)

    --
    Jedaï

Discussions similaires

  1. Thread Perl : Partager un tableau de tables de hash
    Par azertyter dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2014, 22h14
  2. Réponses: 1
    Dernier message: 22/09/2005, 20h39
  3. Thread perl
    Par superjb dans le forum Web
    Réponses: 1
    Dernier message: 12/09/2005, 11h00
  4. [langage] Perl a t'il été compiler avec les threads
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2005, 15h00
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

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