Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2836 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Execution de progarmme en paralelle - gestion de memoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Execution de progarmme en paralelle - gestion de memoire

n°1611199
mesuline
Posté le 12-09-2007 à 22:07:13  profilanswer
 

Bonjour a tous
 
Je suis relativement nouvelle en programmation, et je me pose des questions sur la gestion de la memoire lors de l'execution d'un programme.
J'ai fait un client irc en C, qui prend en parametre le serveur irc, le nick, le chanel...
J'aimerais avoir plusieurs client en meme tps, vers des serveurs differents.  
Je peux executer plusieurs fois mon programme en changeant les parametres ou je dois creer une application "mere" qui cree des threads?
 
Merci d'avance pour vos reponses!

mood
Publicité
Posté le 12-09-2007 à 22:07:13  profilanswer
 

n°1611201
flo850
moi je
Posté le 12-09-2007 à 22:11:39  profilanswer
 

ca depend de ce que tu veux en faire : est ce que chaque programme est completement independant, ou est ce que tu veux les faire communiquer ?  
dans le premier cas,  l'independance, dans  l'autre pas

n°1611203
mesuline
Posté le 12-09-2007 à 22:14:31  profilanswer
 

je ne veux pas les faire communiquer. je veux juste etre sure qu'il vont pas "s'ecrire" les uns sur les autres (par exemple les variables locales vont bien etre differentes?)

n°1611512
mesuline
Posté le 13-09-2007 à 22:21:28  profilanswer
 

personne n'a d'idee?

n°1611619
Bidem
Posté le 14-09-2007 à 11:16:19  profilanswer
 

mesuline a écrit :

je ne veux pas les faire communiquer. je veux juste etre sure qu'il vont pas "s'ecrire" les uns sur les autres (par exemple les variables locales vont bien etre differentes?)


 
A priori, tu peux lancer ton programme plusieurs fois sans que ça pose problème (chaque programme possède sa propre zone en mémoire et donc pas de problème avec les variables locales).
 
Il faut tout de même faire attention à ce qu'ils ne partagent pas de ressources physique.
Exemple, si 2 programmes écrivent dans le même fichier, ça risque de poser problème.

n°1611738
mesuline
Posté le 14-09-2007 à 17:37:39  profilanswer
 

Merci beaucoup!

n°1612800
mesuline
Posté le 18-09-2007 à 23:09:48  profilanswer
 

Mmm c'est etrange les connexions se font bien mais les message n'arrivent pas dans les bonnes socket, tout se melange...
Tu es sur que si je lance deux fois le meme programme il n'y a pas qu'une seule zone memoire commune pour les variables locales?

n°1612918
omega2
Posté le 19-09-2007 à 11:23:59  profilanswer
 

Houla, c'est une question qui semble simple à la base mais qui est complexe à l'arrivé.
 
Voilà les principaux conflits pouvant survenir quand on exécute en même temps deux fois le même programme :
- tentative d'utilisation du même port réseau
- tentative d'utilisation d'un même fichier
- tentative d'utilisation d'une même ressource matérielle sans passer par les couches d'abstraction de l'os ou en passant par des couches d'abstractions qui n'ont pas prévus de mécanismes d'accès concurrentiel
- utilisation d'une DLL qui travaille sur les même espaces mémoires quelque soit les programmes qui l'appellent. C'est super chiant quand on essaye de trouver d'où viennent les bugs. (peut être l'origine de ton problème)
- dialogue avec la même instance d'un programme tier. Ca n'est pas gênant si le programme tier est prévus prévus pour ça (bases de données par exemple) mais c'est super chiant quand ça n'est pas le cas ("Ms word" par exemple)

n°1612929
MagicBuzz
Posté le 19-09-2007 à 11:48:56  profilanswer
 

mesuline a écrit :

Mmm c'est etrange les connexions se font bien mais les message n'arrivent pas dans les bonnes socket, tout se melange...
Tu es sur que si je lance deux fois le meme programme il n'y a pas qu'une seule zone memoire commune pour les variables locales?


Les sockets, c'est justement une ressource partagée, tout comme un fichier sur le disque.
Il ne faut pas que tes programmes utilisent les mêmes port.
 
Si tu dois avoir un port fixe côté client, alors il te faut effectivement une application mère, qui va lancer les différents clients sous forme de Threads ou Processus. Et c'est elle, et elle seule, qui va s'occuper de la partie socket, et faire l'aiguillage entre les différents threads.

n°1613191
mesuline
Posté le 19-09-2007 à 19:37:56  profilanswer
 

Ce n'est pas le couple IP/port qui identifie le socket? Si mes programmes se connectent a des serveurs/port differents, les clients devraient utiliser dynamiquement des ports different cote client?

mood
Publicité
Posté le 19-09-2007 à 19:37:56  profilanswer
 

n°1613196
MagicBuzz
Posté le 19-09-2007 à 19:48:00  profilanswer
 

Ben ça c'est toi qui choisi logiquement ton port d'écoute.
D'après ta description du problème, tous tes clients écoutent en même temps sur le même port, et l'adresse distante ne donnera pas d'info à l'OS pour savoir à qui envoyer l'info : c'est le premier process qui se réveille qui vient lire le buffer réseau, sans chercher à comprendre d'où ça vient logiquement.
 
Mais bon, je voudrais pas trop m'avancer, j'ai pas fait de réseau depuis une éternité... Et je passais par WINSOCK.OCX (contrôle pour VB) qui de toute façon lève une erreur si on tente d'écouter sur un port déjà utilisé par une autre application.
 
Dans tous les cas, ton problème doit venir de là, car tu peux lancer autant de fois la même application, tu ne dois pas avoir de problème de gestion mémoire. En Assembleur, à la limite, tu peux faire l'erreur de forcer la lecture dans une zone mémoire précise, mais ça implique que tu travailles en mode non protégé, et je ne sais même pas si les versions actuelles de Windows le permettent. (le mode non protégé implique que ce n'est pas l'OS qui gère la mémoire du programme, mais le programme lui-même... étant donné que c'était la source de... 99% des écrans bleus de Windows, Microsoft a mis un point d'honneur à faire cesser ce genre de pratiques. notamment si la plupart des programmes MS-DOS ne fonctionnent pas sous Windows XP, c'est souvent à cause de ça)


Message édité par MagicBuzz le 19-09-2007 à 19:49:56

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Execution de progarmme en paralelle - gestion de memoire

 

Sujets relatifs
probleme d'execution de macro sur feuille vérouillée ( partiellement)Detection d'OS à l'exécution
Aide pour la gestion du temps et des applications[JS]Problème d'execution de fction sur onchange() avec IE7
Gestion lock optimiste avc Hibernate et archi n-tiersrétablir la gestion des erreurs par défaut dans access
Choix d'un Système de gestion de contenu (CMS)execution très très lente
[C] droit d'executionSystème de gestion de contenu
Plus de sujets relatifs à : Execution de progarmme en paralelle - gestion de memoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR