Thread Perl (Urgentissime--Help)

Thread Perl (Urgentissime--Help) - Perl - Programmation

Marsh Posté le 28-12-2005 à 11:08:46    

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

Reply

Marsh Posté le 28-12-2005 à 11:08:46   

Reply

Marsh Posté le 28-12-2005 à 11:36:04    

Citation :

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.


Oui, je pense que vu tes contraintes, le choix est limite.  
Il y a Squirrel et Lua, qui incluent des coroutines par defaut dans le langage. Squirrel est cense etre peu gourmand en memoire (des essais sont necessaires cependant, avec seulement 16 Mo de RAM), en tout cas surement moins que Perl. Les coroutines ne sont pas des threads a proprement parler, il faut suspendre explicitement l'execution d'une coroutine pour qu'elle laisse la main aux autres, mais c'est plus rapide et moins gourmand que les threads. Squirrel est facile a apprendre et plus propre que Perl. J'ai pu le compiler assez facilement pour plusieurs machines, donc ca doit etre possible pour ta cible.
 

pimpampoum66 a écrit :


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.
JB


Il y a de grandes chances en effet. A ta place, je commencerais par faire un test en Squirrel, et si ca ne convient pas, je passerais en C.
 

Citation :

Existe il des méthodes pour optimiser un code en perl?


Pas grand chose a ma connaissance a part utiliser "my" devant un maximum de declarations de variables pour qu'elles soient locales. Mais pour faire une trentaine de threads avec 16 Mo de RAM, Perl n'est pas vraiment le langage le plus adapte.


Message édité par el muchacho le 28-12-2005 à 12:02:18

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed