Forum Programmation.perl Thread Perl (urgentissime :) )

Posté par  .
Étiquettes : aucune
0
28
déc.
2005
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
  • # [threads::shared]

    Posté par  . Évalué à 3.

    Il existe un très bon tutoriel sur les threads en Perl (lien ci-dessous - traduction française)
    http://perl.enstimac.fr/DocFr/perlthrtut.html

    L'utilisation de "use threads::shared;" devrait te permettre de partager certains modules (DBI par exemple) et d'économiser ainsi un peu de mémoire (le module n'est chargé qu'une seul fois et est ensuite partagé par tous les threads).
  • # Ne pas oublier que les threads perl5 ne sont qu'une infâme bidouille.

    Posté par  . Évalué à 5.

    En effet, Perl a l'origine n'était pas censé gérer les thread. Mais comme c'est un truc bien pratique, les concepteurs de Perl ont greffé ce concept. On obtient un truc qui marche parfois, mais qui est bien prise de tête. Python s'en sort beaucoup mieux de ce coté.

Suivre le flux des commentaires

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