BlueM.Opt Multithreading: Difference between revisions
Line 42: | Line 42: | ||
[[Bild:Sequenzdiagramm Multithreading.png|thumb|200px|Sequenzdiagramm Multithreading]] | [[Bild:Sequenzdiagramm Multithreading.png|thumb|200px|Sequenzdiagramm Multithreading]] | ||
===ThreadFree=== | |||
===ThreadReady=== | |||
[[Kategorie:BlueM.Opt Development]] | [[Kategorie:BlueM.Opt Development]] |
Revision as of 14:11, 18 February 2009
BlueM.Opt | Download | Usage | Development
- → siehe auch Bug 345
Evaluierung in multiplen Threads ist bisher implementiert für die Anwendungen BlueM und SWMM, und den Methoden PES, CES, und HYBRID.
Anleitung zur Implementation für weitere Methoden
Zusammenfassung
- Array von Individuen an
Sim.Evaluate()
übergeben - Optional: Methode schreiben, die das Event
Sim.IndividuumEvaluated()
abfängt und evaluierte Individuen sofort verarbeitet
Alternativ: warten, bisSim.Evaluate()
mit allen Individuen fertig ist und die Individuen dann stoßweise verarbeiten.
Ausführliche Anleitung
Multithreading wird von der Klasse Sim
übernommen.
Die folgende (überladene) Methode kriegt ein Array von Individuen übergeben, die dann in multiplen Threads abgearbeitet werden. <vbnet>Public Overloads Function Evaluate(ByRef inds() As EVO.Common.Individuum, Optional ByVal storeInDB As Boolean = True) As Boolean()</vbnet>
Sobald ein Individuum (erfolgreich) fertig evaluiert wurde, wird folgendes Event ausgelöst: <vbnet>Public Event IndividuumEvaluated(ByRef ind As EVO.Common.Individuum, ByVal i_Nachf As Integer)</vbnet>
Nachdem alle Individuen fertig evaluiert wurden, wird das gesamte Array von Individuen zurückgegeben.
Es gibt also zwei Möglichkeiten, die evaluierten Individuen weiterzuverarbeiten:
- In Echtzeit (mit Event)
- Stoßweise (ohne Event)
Echtzeitauswertung
Das Event muss von einer Methode abgefangen werden, im ES-Controller ist dies beispielsweise folgende Methode: <vbnet>Private Sub processIndividuum(ByRef ind As Common.Individuum, ByVal iNachfahre As Integer) Handles Sim1.IndividuumEvaluated</vbnet>
Nachdem die Methode Sim.Evaluate()
fertig ist, müssen dann nur noch evtl. vorhandene nicht-erfolgreich evaluierte Individuen behandelt werden. (Erkennbar an dem zurückgegebenen Array von Booleans.)
Stoßweise Auswertung
Warten, bis die Methode Sim.Evaluate()
fertig ist, und die Individuen erst dann verarbeiten.
Evaluierung ohne Multithreading
Für mit ohne Multithreading gibts die Methode Sim.Evaluate()
auch für einzelne
Individuen.
Anleitung zur Implementation in weiteren Anwendungen