Le 28 avr. 05, à 10:08, BELEM Mahamadou a écrit :
Je reviens encore sur le sujet de parallélisme. Si j'ai bien compris votre exemple, les blocs "Saluts", "Hello" et "Coucou" s'exécutent en parallèle. Ce que j'envisage de faire c'est d'exécuter plusieurs objets simultanément. J'ai plusieurs objets dont le nombre peut augementer ou diminuer pendant l'exécution du programme. Ces objets, je les ai dans une liste sous forme de collection. Je ne veux pas les traiter séquentiellement en faisant par exemple : maCollection do: [:a| a optimiser].
Pourquoi pas maCollection do: [:a| [a optimiser] fork] ? (Ne pas oublier d'insérer des Processor yield dans "optimiser".
la fonction optimiser fait appel à un autre porgramme qui est sous Gams. Donc tous les objets accèdent au même programme pour l'exécution à partir de la méthode "optimiser".
Je m'explique : voici le corps du programme principal
stepD1G: t // le temps d'éxécution courant | collec | self thePR_Cells do: [:a | a status: #notRent]. self create1Group. collec := Cormas mixt: self thePR_Farmers. //mes objets [collec do: [:f |f optimiser.]]fork .
collec do: [:f | f initialCalls]. collec do: [:f | f proposals]. collec do: [:f | f finalAnswers]. collec do: [:f | f update].
voici le corps de optimiser de la classe PR_Farmers:
PR_Farmers optimiser WinProcess cshOne: 'Gams D:\Belem\Modele\plantsAcess1.gms'.
Si je lance mon programme pour 10 pas d'éxécution, tout le corps du programme s'exécute normalement pour chaque pas de temps, mais le bock Fork s'éxécute à la fin du programme pour tous les 10 pas de temps (au même moment) ce qui est anormal.
Non, c'est normal. Frok crée un process de la même priorité que celui qui tourne. Et Smalltalk exécute un process tant qu'il ne s'arrête pas ou se suspend ou donne lui même la main (ou encore pas préempté). Donc, si tu veux que ton fork prenne la main, il faut insérer juste après un Process yield.
Pour comprendre exécute ces 2 bouts de code dans un workspace. ----------------------------------------------------------- Code 1 ----------------------------------------------------------- |lock| Transcript clear. lock := Semaphore forMutualExclusion. [5 timesRepeat: [ lock critical: [Transcript cr; show: 'Fork'].]] fork. 5 timesRepeat: [ lock critical: [Transcript cr; show: 'Courant'].]
----------------------------------------------------------- Code 2 ----------------------------------------------------------- |lock| Transcript clear. lock := Semaphore forMutualExclusion. [5 timesRepeat: [ lock critical: [Transcript cr; show: 'Fork']. Processor yield]] fork. 5 timesRepeat: [ lock critical: [Transcript cr; show: 'Courant']. Processor yield] -----------------------------------------------------------
Dans le code 1 le proess courant termine son exécution (5 affichages de Courant) puis le Fork prend la main. Dans le code 2, Fork et Courant sont affichés à tour de rôle. La différence est dans le Processor yield.
Mon souci est comment exécuter simultanément mes n objets pour chaque pas de temps sans rencontrer le problème expliqué.
Bien à vous
BELEM Mahamadou
Noury Bouraqadi bouraqadi@ensm-douai.fr wrote: Il faut pas oublier des Processor yield pourqu'ils se passent la main. Pour avoir une idée, exécute ce bout de code dans un workspace. Chacun des 3 process affichera son message à tour de rôle sur le Transcript.
|lock| Transcript clear. lock := Semaphore forMutualExclusion. [5 timesRepeat: [ lock critical: [Transcript cr; show: 'Salut']. Processor yield]] fork. [5 timesRepeat: [ lock critical: [Transcript cr; show: 'Hello']. Processor yield]] fork. [5 timesRepeat: [ lock critical: [Transcript cr; show: 'Coucou']. Processor yield]] fork.
Le lock ici sert uniquement pour gérer la concurrence d'accès au Transcript.
Noury
Le 27 avr. 05, à 16:30, Romain Robbes a écrit :
A côté j'ai un autre modèle fait sous Gams (programmation mathématique), chaque objet doit exécuter le modèle par une méthode que j'appelle "optimiser". J'ai considéré au départ les objets comme une collection :
... [collec do: [:each| each optimiser]] fork. ...
collec do: [:each | [each optimiser] fork].
peut-être ?
Romain_______________________________________________ Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Dr. Noury Bouraqadi - Enseignant/Chercheur Ecole des Minees de Douai - Dept. G.I.P http://csl.ensm-douai.fr/noury
European Smalltalk Users Group Board http://www.esug.org
Squeak: an Open Source Smalltalk http://www.squeak.org
Découvrez le nouveau Yahoo! Mail : 250 Mo d'espace de stockage pour vos mails ! Créez votre Yahoo! Mail
-------------------------------------------------------------- Dr. Noury Bouraqadi - Enseignant/Chercheur Ecole des Mines de Douai - Dept. G.I.P http://csl.ensm-douai.fr/noury
European Smalltalk Users Group Board http://www.esug.org
Squeak: an Open Source Smalltalk http://www.squeak.org --------------------------------------------------------------
squeak-fr@lists.squeakfoundation.org