JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=12fed527db6b42a23aec45980704cc09Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Spielschleife [Multithreading]
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dietmar Ferstl
Mini JLI'ler



Anmeldedatum: 19.07.2002
Beiträge: 47
Wohnort: Regensburg/Bayern
Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 06:56    Titel: Spielschleife [Multithreading] Antworten mit Zitat

Zitat:
Ich weise nochmal darauf hin, das der Code eine Beta-Version ist und sicherlich noch ver(schlimm)bessert werden könnte. Fragen zu dem Code, die an alle gerichtet sind, bitte in einem neuem Thread bei "Sprachen" oder bei "DirectX, OpenGL"...


Hallo,
Habe mir das Beispielprogramm mal kurz angesehen.
Ich versteh das jetzt nicht ganz. Was ist der Sinn, das Rendering in einen Thread auszulagern ?Question
Ich meine wo ist der Vorteil. Ich bin halt der Auffassung, wenn man Threads vermeiden kann, sollte man's tun.

CU
D.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 10:53    Titel: Antworten mit Zitat

Ein Thread in einem Forum ist ein Thema. Oder meinst du da was anderes / woher kommt das Zittat eigentlich?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 11:35    Titel: Antworten mit Zitat

Das ist irgendso ein uraltes Beispiel für eine Spielschleife, von irgendeinen hier im Forum. Hab ich mir vor längeren auch mal geladen, aber nie so richtig verinerlicht.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 16:26    Titel: Antworten mit Zitat

Von irgendeinem is gut. Das is immer hin von Afe-Gmdg. Very Happy

Ausserdem ist die Spielschleife gar nicht so schlecht. Aber bei dx lohnen sich threads AFAIK nicht, weil das selbst welche anlegt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 16:40    Titel: Antworten mit Zitat

Da ich schon sehr lange ein Multiprozessorsystem habe, da mich damals Leute gefragt hatten, wie ma sowas macht - und überhaupt - hatte ich einfach mal eine Spieleschleifenversion mit Multithreadingunterstützung angeboten. Was der einzelne daraus dann macht, war mir zu diesem Zeitpunkt eigendlich egal.
Dass man Multithreading nach Möglichkeit vermeiden soll, stimmte vielleicht früher, aber ich denke, dass in allernächster Zukunft sehr viele Spiele aus folgenden Gründen auf massives Multithreading setzen:
1. Die HT-Technologie von Intel ist noch lange nicht das Ende der Fahnenstange: AMD und Intel haben Prozessoren mit mehr als 16 Prozessorkernen angekündigt, in näherer Zukunft steht wohl für jeden Prozess ein eigener Prozessor(kern) zur Verfügung. Das wiederum ermöglicht massive Leistungssteigerungen, da das zeitaufwendige Prozessswitching entfällt.
2. Man kann unabhängig von der Bildwiederholfrequenz eine Steuerung implementieren, so haben Leute mit langsameren Grafikkarten trotzdem die Möglichkeit weich zu steuern und eventuell besser zu reagieren.
3. Unwichtige, aber trotzdem notwendige Ressourcenarbeiten könnten in Hintergrundthreads geschoben werden. Mann kann z.B. Level dynamisch nachladen, ohne dass der Benutzer einen Ladescreen zu sehen bekommt. Wenn der Spieler in die Nähe eines Ausganges kommt, kann der dahinterliegende Level ja schonmal geladen werden, damit es gleich weitergeht. Manager für Texturen, Objekte usw. sind ebenfalls gute Kandidaten für Hintergrundthreads...

Im allgemeinen sind Multithreading-Programme schwerer umzusetzen (Stichwort Syncronisation) bieten aber Vorteile, die in Singlethreading-Umgebungen nur sehr schwer umsetzbar wären.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.06.2004, 17:06    Titel: Antworten mit Zitat

Das Laden der Levels ist ein wunderbares Beispiel, sonst hätt ich das vermutlich sehr umständlich über Streaming gelöst.

Das Rendering in einen Thread auszulagern könnte da schon problematischer werden da es dort ne menge Deadlocks geben kann.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 13:41    Titel: Antworten mit Zitat

Salve,

könnte mir nochmal jemand erklären was Singlethreading/Multithreading ist bzw. was überhaupt ein "Thread" ist?

Vale,
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 14:26    Titel: Antworten mit Zitat

Multithreading ist wenn 2 Prozesse gleichzeitig ablaufen. So kann der eine Prozess z. B. das nächste Level laden, wärden der andere die normale Spielschleife ausführt.
Singlethreading ist wenn beides in einer Schleife abläuft.
Man braucht für Multithreading eigentlich 2 Prozessoern aber man kann das auch bis zu einem gewissen Grad simuleiren (z. B. Windows, meherer Programme gleichzeiti (Multitasking)).
Intels neue Prozessoren mit dem HT kürzel sind für Multithreading glaub ich ganz gut geeignet.

Mehr weiß ich auch nicht, bin kein Profi
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
fowly
JLI'ler



Anmeldedatum: 25.01.2004
Beiträge: 196
Wohnort: Detmold - NRW
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 14:33    Titel: Antworten mit Zitat

stimmt, intels neue mit ht (hyper-threading) sind für multithreading anwendungen gut geeigenet, oder auch gerade für windows multitasking. der prozessor kann die resourcen also einfach besser auf die aktionen aufteilen, und afaik auch besser mit mehreren prozessoren arbeiten.
_________________
<-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->

Das Spiel zu unserer Schule:

http://www.grabbe-game.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dietmar Ferstl
Mini JLI'ler



Anmeldedatum: 19.07.2002
Beiträge: 47
Wohnort: Regensburg/Bayern
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 15:45    Titel: Antworten mit Zitat

Hi,

multithreading wurde mit mehreren Prozessoren bereits von WIN NT4.0
unterstützt.

Das Problem beim Multithreading ist immer dann gegeben, wenn Daten des einen Threads mit den Daten des anderen Threads irgendwie zu tun haben, d.h. einer auch mit den Daten des anderen arbeitet.
Sowas ist nur sehr schwer zu debuggen.

CU
D.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 20:09    Titel: Antworten mit Zitat

Multithreading und Multitasking muss grundsätzlich erst mal voneinander unterschieden werden.
Windows ist ein Multitasking Betriebssystem. Jede Anwendung, Jede Hintergrundanwendung (Services oder Serverprogramme) sind je ein Task. Der Taskmanager zeigt alle Tasks an. (mit ID, Name usw.)
Ein Programm, dass Singlethreaded Kompiliert wurde, belegt *immer* genau einen Task mit einem Thread.
Programme können auch Multithreaded kompiliert werden, dann wird gegen andere WindowsAPI-Funktionen gelinkt, nämlich gegen Funktionen, die Multithread-Sicher sind. Sie sind in der Regel etwas langsamer, da Sicherheitsmechanismen eingebaut sein müssen.
Ein Thread ist also kein eigenständiges Programm, sondern eine eigenständig fungierende Ausführungseinheit. Sie muss mit allen anderen Threads um begrenzte Resourcen konkurieren.

Als Beispiel kann ich folgende Geschichte erzählen:
2 Menschen, die in einer Wohnung leben (ein Task, 2 Threads)
Die erste Person nimmt ein Bad. Die zweite Person kommt nach Hause und will ebenfalls ein Bad nehmen. Die Wanne ist besetzt (Resourcenproblem), so muss die zweite Person auf die erste warten. Die erste Fragt die zweite Person nach einem kleinen Imbiss - sie will erst aus der Wanne, wenn sie (dort) Ihr essen futtert. Die zweite Person will aber unbedingt erst in die Wanne, bevor sie sich um weitere Aufgaben kümmert. Und schon haben wir einen Dead-Lock, eine Situation, die erst dann gelöst werden kann, wenn eine der beiden Personen nachgibt, weil beise sich um die selbe Resource streiten. Übertragen auf Programmresourcen wie Dateien, Schreib- und Lesezugriff, Variablen usw. gibt es bei Multithreading-Programmen viele Fehlerquellen, die nur schwer zu lokalisieren sind, da das Programm an sich ja föllig Fehlerfrei laufen kann.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dietmar Ferstl
Mini JLI'ler



Anmeldedatum: 19.07.2002
Beiträge: 47
Wohnort: Regensburg/Bayern
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 20:16    Titel: Antworten mit Zitat

Hallo,

das Prob ist aber, dass man nie weiss, wenn ein Thread wieder "angesprungen" wird. Zumindest habe ich noch keine Möglichkeit gefunden, dies zu kontrollieren.
Oder kennt sich da jemand aus?

D.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 14.06.2004, 20:19    Titel: Antworten mit Zitat

man könnte das durch globale bzw. statische variabeln lösen, ebenfalls ist es ja möglich einem thread variabeln zu übergeben das können genauso gut pointer wie strukturen/klassen sein.

Somit könnte man einen Kontrollmechanismus relativ problemlos einbauen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dietmar Ferstl
Mini JLI'ler



Anmeldedatum: 19.07.2002
Beiträge: 47
Wohnort: Regensburg/Bayern
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 20:25    Titel: Antworten mit Zitat

Hallo,

was nützt dir ein "Kontrollmechanismuss" ?
Entscheidend ist doch die Zeit, die der Prozi "ausserhalb" deines Threads verbringt. Wie willst du denn erzwingen, dass diese Zeit z.B. nur maximal 1 Millisekunde betragen soll?

D.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 14.06.2004, 20:29    Titel: Antworten mit Zitat

Dietmar Ferstl hat Folgendes geschrieben:
Hallo,

das Prob ist aber, dass man nie weiss, wenn ein Thread wieder "angesprungen" wird. Zumindest habe ich noch keine Möglichkeit gefunden, dies zu kontrollieren.
Oder kennt sich da jemand aus?

D.


erstmal würde es helfen was du damit meinst wenn ein Thread wieder "angesprungen" wird. Welcher thread ? Der main oder der Subthread ?

Ich frage das nur um streiterein aus den Weg zu gehen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum