[Model View Controller] Parallelisierung des Models
Verfasst: Di Feb 05, 2013 12:17 pm
Hey,
wenn ich ein Programm nach dem Model-View-Controller Design habe, ist es da sinnvoll das Model als eigenständigen Thread zu implementieren und über ein Eventsystem mit dem Controller arbeiten zu lassen? Beispielsweise wenn die View die Ausgabe eines 2D-Spiels erledigt und der Controller dabei die Benutzereingaben auswertet und vom Model Dinge berechnen lässt.
Also quasi so, dass Controller und View vom primären Thread behandelt werden und das Model eigenständig parallel läuft. Dann würde der Controller z.B. eine Bewegung (Pfeiltaste) erkennen, dem Model ein Event (dass sich der Spieler bewegen will) zuschieben. Irgendwann gibt das Model eine Antwort mit der neuen Position des Spielers. Die Antwort bekommt dann der Controller (über ein Event-System zurück) und kann der View die Veränderung mitteilen. Dabei könnte der Controller gucken: "Sind Events vom Model angekommen?". Wenn ja, gibt es die Events an die View (damit diese dann die Ausgabe modifiziert). Wenn er damit fertig ist (oder keine Events ankamen) lässt der Controller die View noch zeichnen und beginnt wieder von vorne.
Damit müsste der Controller nicht auf ggf. langwierige Pfadfindungen warten (imho würde das ja zu Lags führen). Andererseits sollte ich auch keine Probleme mit Race Conditions bekommen, wenn ich das Event-System bzgl. Senden und Empfangen von Events thread-safe mache, wenn für das Model genau ein Thread (und nicht mehrere) verantwortlich sind.
Was sagt ihr dazu? Ist das sinnvoll? Und auf was müsste ich konzeptionell noch achten?
LG Glocke
wenn ich ein Programm nach dem Model-View-Controller Design habe, ist es da sinnvoll das Model als eigenständigen Thread zu implementieren und über ein Eventsystem mit dem Controller arbeiten zu lassen? Beispielsweise wenn die View die Ausgabe eines 2D-Spiels erledigt und der Controller dabei die Benutzereingaben auswertet und vom Model Dinge berechnen lässt.
Also quasi so, dass Controller und View vom primären Thread behandelt werden und das Model eigenständig parallel läuft. Dann würde der Controller z.B. eine Bewegung (Pfeiltaste) erkennen, dem Model ein Event (dass sich der Spieler bewegen will) zuschieben. Irgendwann gibt das Model eine Antwort mit der neuen Position des Spielers. Die Antwort bekommt dann der Controller (über ein Event-System zurück) und kann der View die Veränderung mitteilen. Dabei könnte der Controller gucken: "Sind Events vom Model angekommen?". Wenn ja, gibt es die Events an die View (damit diese dann die Ausgabe modifiziert). Wenn er damit fertig ist (oder keine Events ankamen) lässt der Controller die View noch zeichnen und beginnt wieder von vorne.
Damit müsste der Controller nicht auf ggf. langwierige Pfadfindungen warten (imho würde das ja zu Lags führen). Andererseits sollte ich auch keine Probleme mit Race Conditions bekommen, wenn ich das Event-System bzgl. Senden und Empfangen von Events thread-safe mache, wenn für das Model genau ein Thread (und nicht mehrere) verantwortlich sind.
Was sagt ihr dazu? Ist das sinnvoll? Und auf was müsste ich konzeptionell noch achten?
LG Glocke
