|
Descentforum.DE
|
View previous topic :: View next topic |
Author |
Message |
King Lo Forum-Nutzer
Joined: 14 Mar 2006 Posts: 320
Location: Stuttgart, BW
|
Posted: 25.07.2010, 22:11 Post subject: Wie viele Threads erwartet ihr von nem guten Programm? |
|
|
Hey,
hatte grad mit d3jake eine interessante Diskussion, in wie viel Threads wir den Netzwerkcode von FlightBack aufspalten sollen. Ich hatte eine Idee, ca. 8 Threads für den Netzcode zu verwenden (und später noch viele mehr). Ich würde Dinge, die eigentlich ohnehin nicht viel machen, gerne in Threads aufspalten (Ein Thread, der einkommende Pakete AntiCheat-scannt, einer, der ausgehende Pakete multiplext, einer, der sie nur quittiert, .....). Das ganze hat Zukunft und ist vermutlich sogar einfacher zu programmieren.
jake hingegen meinte, man sollte lieber Rücksicht auf Leute mit älterer Hardware nehmen. Die kritischeFrage ist, wie viele Thread-Switches man PCs mit einem Core und nicht so viel RAM zumutet... (U.u. wird sogar sinnlos zu Threads geswitched, die gar nix zu tun haben?).
Wie sieht denn die Zukunft nun aus?
- Laut Intel haben wir in einigen Jahren schon Millionen-Cores...
- Jemand an der Uni meinte neulich, dass der RAM zur Engstelle wird, da man es nicht bezahlen kann, Millionen RAM-Bausteine auf einer Platine unterzubringen, und sich deshalb eh die meisten Threads den Memory teilen, und Threads daher *nicht unbedingt* die Zukunft sind...
Um noch mal zur Frage zurückzukehren: Sollte man ein Programm "auf Teufel komm raus" multi-threaden, d.h. jede einfachste Tätigkeit nochmal versuchen zu spalten? Und was meinen dann die Anwender, die bei alter Hardware evtl. mit den Thread-Switches zu kämpfen haben?
Würde mich freuen ein paar Meinungen zu hören!
Gruß,
Lo
|
|
Back to top |
|
|
Floyd Forum-Orakel
Joined: 20 Mar 2001 Posts: 2912
Location: Dresden, Germany
|
Posted: 25.07.2010, 22:41 Post subject: |
|
|
frag mal in einem programmiererforum nach. hier sind größtenteils nur spieler und vermutlich hat mehr als die hälfte davon keine ahnung wovon du hier redest .
viel sinnvoller wäre die frage: "was habt ihr derzeit für hardware und was plant ihr für die zukunft?" den rest musst du als angehender softwareingenieur selbst herausfinden.
|
|
Back to top |
|
|
Do_Checkor Administrator
Joined: 19 Nov 2000 Posts: 7772
Location: Oldenburg (Oldb.)
|
Posted: 25.07.2010, 22:45 Post subject: |
|
|
Floyd wrote: | hier sind größtenteils nur spieler und vermutlich hat mehr als die hälfte davon keine ahnung wovon du hier redest . |
Ich tippe ja eher auf 95%
|
|
Back to top |
|
|
Floyd Forum-Orakel
Joined: 20 Mar 2001 Posts: 2912
Location: Dresden, Germany
|
Posted: 25.07.2010, 22:53 Post subject: |
|
|
sind doch mehr als die hälfte
|
|
Back to top |
|
|
Pffzzhh Forum-Nutzer
Joined: 04 Jun 2007 Posts: 138
Location: Braunschweig
|
Posted: 26.07.2010, 07:30 Post subject: |
|
|
Da ich mit Programmierung auch so meine Erfahrung habe, gebe ich mal meinen Senf dazu.
Ich empfinde das aufteilen kleinster Teile in noch kleinere Teile nicht sinnvoll. Wenn wir von vielleicht 5 % Laufzeit für den Netzcode ausgehen, macht eine weitere Unterteilung kaum Sinn. die anderen 95 % sollten besser aufgeteilt werden, auch wenn dass schwierig ist.
Zuviele Threads kann man selbst für Singlecore Prozessoren kaum erzeugen, ich bin mir nicht sicher wo die liegt, aber selbst hunderte Threads im Programm sollten da noch keien Probleme machen. Allerdings rührt diese Erfahrung nur vom ausführen von Programmen. Beim Programmieren habe ich bisher nur simplen Test-Code entwickelt um die Möglichkeiten auszuloten.
Ich hoffe, das hilft dir etwas weiter...
|
|
Back to top |
|
|
King Lo Forum-Nutzer
Joined: 14 Mar 2006 Posts: 320
Location: Stuttgart, BW
|
Posted: 26.07.2010, 10:28 Post subject: |
|
|
Naja, zu man *kann* wohl schon 32.000 erzeugen, aber die Frage ist nur, wann der Overhead zu viel wird
@all: Wie das Thema schon sagt... Die Frage ist eigtl., was die Anwender erwarten, nicht nur die Programmierer. Daher sind gerne Kommentare von nicht-Programmierern erwünscht!
|
|
Back to top |
|
|
Maulwurf aka Seeker
Joined: 17 Jul 2001 Posts: 2191
Location: Stuttgart
|
Posted: 26.07.2010, 10:41 Post subject: |
|
|
ich frag mich was ein normaler Anwender von Threads verstehen soll. ich frag mich sogar was die frage soll. dieses thema in dieser weise aufziehen zu wollen find ich sinnlos. ein thread kommt da zum einsatz, wenn der rest vom programm geblockt werden würde. fertig. sequentielle abläufe in threads aufzuspalten macht keinen sinn. man hat nur aufwand das zeug zu synchronisieren ohne weiteren nutzen.
|
|
Back to top |
|
|
Munk Forum-Nutzer
Joined: 30 Jun 2001 Posts: 2140
Location: Herzogenrath
|
Posted: 26.07.2010, 14:21 Post subject: |
|
|
Kurz: Es hängt vom konkreten Problem ab.
Es macht kein Sinn mehrere Threads auf verschiedene Probleme loszulassen, wenn jeder Thread auf das Ergebnis des anderen Threads warten muss.
Ich weiß nicht genau was Du machen willst, aber das Suchen nach Signaturen in Paketen würde ich auf jeden Fall in einem Thread parallel zur dessen Verarbeitung machen, es sei denn Du musst das Paket vor der Verarbeitung modifizieren.
|
|
Back to top |
|
|
Thomas Forum-Nutzer
Joined: 07 Feb 2008 Posts: 245
|
Posted: 26.07.2010, 16:15 Post subject: |
|
|
Wollt auch grad mit einer Erörterung anfangen, hab aber dann gesehen, daß Maulwurf das schon getan hat.
Zu Threads hat man keine Meinung. Sie gehören dahin, wo sie Sinn machen und raus, wo sie's eben nicht tun. Keine Ahnung, was es da zu diskutieren gäbe. Außer vielleicht, zu erklären, wann diese Fälle eintreten.
Wenn du mehrere (arbeitslastige) Kerne verwenden willst, dann programmier nicht einfach drauf los, sondern prüf beim Start erst einmal die Affinität. 50 Threads für eine aufwendige Berechnung machen nämlcih tatsächlich Sinn, aber halt nur auf einer Kiste mit mindestens 50 CPUs.
Threads, die auf Ereignisse warten, haben so gut wie keinen Overhead. Es geht wirklich nur ums Blocken.
Ein Server wird immer pro Client mindestens einen oder mehrere Threads (oder neue Prozesse, wie's bei Unix-Software noch üblich ist) aufziehen müssen. Stell dir vor, ein Client geht vom Netz oder irgendwo tritt ein Fehler mit Pause auf. Sollen dann die Anderen derweil 30 Sekunden warten?
Jede Art von I/O kann übrigens blocken, d.h. daß du ohne mindestens zwei Threads einen Bug erzeugst. Solange du kein RAID 3 oder 5 für die Platten hast, steht nämlich dein Server u.U. für 100 ms, wenn du in eine Datei schreibst.
|
|
Back to top |
|
|
sattmacher Forum-Nutzer
Joined: 18 Aug 2001 Posts: 334
Location: Erkner
|
Posted: 27.07.2010, 18:51 Post subject: |
|
|
Genau das wollte ich auch sagen,"ES ZZZRIEEETTT SO AUS;DAS HIER DAS FALSCHE FORUM FÜR DEN "ZRIEEETTTT IST"
_________________ "ICH MACH EUCH SATT"
"FLIEGEN KANN JEDER,SCHÖN FLIEGEN NUR ICH"
Last edited by sattmacher on 27.07.2010, 18:52; edited 1 time in total |
|
Back to top |
|
|
King Lo Forum-Nutzer
Joined: 14 Mar 2006 Posts: 320
Location: Stuttgart, BW
|
Posted: 28.07.2010, 14:57 Post subject: |
|
|
@Floyd, Checkor, Mauli, sattmacher:
Die Frage war nicht: "Braucht King Lo jemanden, der ihm prohpezeit, dass ihm vielleicht wenige antworten könnten?"... Ich meine, es gibt immer jemand, der einem helfen kann. Wahrscheinlich haben wir nur ein Dutzend Leute, die sich mit D3EDIT richtig gut auskennen, aber es macht Sinn, dass jeder in einem Forum dazu Fragen stellen kann. Außerdem muss man nicht programmieren zu können, um abzuschätzen, wie sich die Hardware entwickelt oder um seine eigene Systemlast zu beobachten.
Maulwurf wrote: | sequentielle abläufe in threads aufzuspalten macht keinen sinn. |
Gegenbeispiel: Wenn wir einen sequentiellen Ablauf für "Schicke Paket durch Anti-Cheat-Module, danach berechne, welche Spieler der Urheber des Pakets gerade sieht" in 2 Threads aufspalten, dann sparen wir bei sehr vielen Paketen auf nem Dualcore doch fast die Hälfte an Zeit (Stichwort Pipelining). Sehe ich das richtig?
Thomas wrote: | Threads, die auf Ereignisse warten, haben so gut wie keinen Overhead. Es geht wirklich nur ums Blocken. |
Danke, hätte eher das Gegenteil erwartet. d3jake meinte, wir sollten fair zu Nutzern mit alter Hardware sein, aber nachdem was Du sagst, ist es mit den 50 Threads auf nem SingleCore überhaupt merkbar?
Danke an alle, die gute Antworten geschrieben haben.
|
|
Back to top |
|
|
Maulwurf aka Seeker
Joined: 17 Jul 2001 Posts: 2191
Location: Stuttgart
|
Posted: 28.07.2010, 18:28 Post subject: |
|
|
sequentiell ist bei mir beispielsweise ein Ablauf A->B->C wobei B das Ergebnis von A braucht und C das Ergebnis von B. In deinem ersten post klang das so, als ob so etwas aufgespalten werden soll. A ein Thread, B ein Thread und C ein Thread.
|
|
Back to top |
|
|
Munk Forum-Nutzer
Joined: 30 Jun 2001 Posts: 2140
Location: Herzogenrath
|
Posted: 28.07.2010, 21:40 Post subject: |
|
|
King Lo wrote: | Wenn wir einen sequentiellen Ablauf für "Schicke Paket durch Anti-Cheat-Module, danach berechne, welche Spieler der Urheber des Pakets gerade sieht" in 2 Threads aufspalten, dann sparen wir bei sehr vielen Paketen auf nem Dualcore doch fast die Hälfte an Zeit (Stichwort Pipelining). Sehe ich das richtig? |
Pipelining findet auf viel viel kleinerer Ebene statt, da geht es eher um
"Wenn ich erst zwei Zahlen multipliziere, dann kann ich im Takt wo der Multiplizierer beschäftigt ist schon mal die nächste Zahl für die Addition vorbereiten."
Obiges KANNST Du entweder so parallelisieren, daß Du dasselbe Paket parallel vom Anticheat-Modul prüfen lässt, und gleichzeitig dazu die sichtbaren Spieler ermittelst.
Das muss nicht schneller sein, kann aber. Und das "kann aber" bedeutet auch nicht, daß es auf Anhieb klappt, sondern das Du womöglich alles komplett umschreiben musst, um dich dann zum Schluss mit vielleicht 10% zufriedenzugeben.
Parallelisierung baut man nicht eben ein, vielmehr baut man sein Programm um die Parallelisierung herum.
Was aber vermutlich einfacher zu implementieren ist, wenn Du für jeden Spieler ein Thread hast, in dem Du nur Pakete von demjenigen Spieler prüfst. Da Du weißt das die Pakete vollkommen unabhängig von den Spielern hereinkommen stehen sie auch nicht in logischer Abhängigkeit untereinander, wenn Du die Daten von anderen Spielern nur (einmalig!) lesend betrachtest.
Damit hast Du zwar mehr Threads als Kerne zur Verfügung - aber es ist ja auch nicht das Ziel alle Threads gleichzeitig abzuarbeiten (pseudo-gleichzeitig reicht hier, also sequentiell - aber in keiner definierten Reihenfolge), sondern alle Kerne gleichzeitig arbeiten zu lassen.
Last edited by Munk on 28.07.2010, 21:41; edited 1 time in total |
|
Back to top |
|
|
Pffzzhh Forum-Nutzer
Joined: 04 Jun 2007 Posts: 138
Location: Braunschweig
|
Posted: 28.07.2010, 22:21 Post subject: |
|
|
Quote: | Wenn du mehrere (arbeitslastige) Kerne verwenden willst, dann programmier nicht einfach drauf los, sondern prüf beim Start erst einmal die Affinität. 50 Threads für eine aufwendige Berechnung machen nämlcih tatsächlich Sinn, aber halt nur auf einer Kiste mit mindestens 50 CPUs. Winken |
Das würde ich so nicht unterschreiben. Während die CPu noch auf weitere Infos (Aus dem RAM, etc.) von Thread 1 wartet, kann sie weiter an Thread 2 arbeiten (moderne Out-of-Order Architektur).
Daher macht es schon Sinn, prinzipiell mehr zu parallelisieren, als physische Kerne zur Verfügung stehen.
Aber ansonsten muss ich mich anschließen: Thread-Aufteilung macht nur dann Sinn, wenn die Aufgaben auch wirklich unabhängig voneinander bearbeitet werden können. Besser noch, wenn sie auch auf völlig unterschiedliche Ressourcen zugreifen (wobei auch das Gegenteil manchmal positive Effekte haben kann).
Serielle Aufgaben aufzuteilen halte ich auch für kontraproduktiv.
|
|
Back to top |
|
|
Marix Forum-Nutzer
Joined: 30 May 2001 Posts: 1017
Location: Germany
|
Posted: 28.07.2010, 23:00 Post subject: |
|
|
Ich würde heutzutage prinzipiell alles was nicht sequentiell voneinander abhängt in Threads aufteilen. Das tut performancemäßig auch auf alter Hardware nicht wirklich weh und skaliert dann sauber in die Zukunft.
Die wirklich parallele Hardware wirst du aber nur voll nutzen können indem du innerhalb von Aufgaben parallelisiert (z.B. mit OpenMP). Denn meißt gibt es wenige Aufgaben (Graphik, Physik, AI) die viel Rechenzeit brauchen, und viele Aufgaben (Netzwerk, Sound etc) die eh nur irrelevant wenig Zeit brauchen.
_________________ „Der einzige Weg, die Grenzen des Möglichen zu finden, ist ein klein wenig über diese hinaus in das Unmögliche vorzustoßen.“
--Arthur C. Clarke
Last edited by Marix on 28.07.2010, 23:02; edited 1 time in total |
|
Back to top |
|
|
Do_Checkor Administrator
Joined: 19 Nov 2000 Posts: 7772
Location: Oldenburg (Oldb.)
|
Posted: 29.07.2010, 00:46 Post subject: |
|
|
King Lo wrote: | @Floyd, Checkor, Mauli, sattmacher:
Die Frage war nicht: "Braucht King Lo jemanden, der ihm prohpezeit, dass ihm vielleicht wenige antworten könnten?"...
...
Wahrscheinlich haben wir nur ein Dutzend Leute, die sich mit D3EDIT richtig gut auskennen, aber es macht Sinn, dass jeder in einem Forum dazu Fragen stellen kann. |
Öhm, ich erlaube mir da doch kurz folgenden Kommentar: Wenn die Admins eines Forums Dich freundlich drauf hinweisen daß Du mit Deiner Frage in einem passenden Internetforum besser aufgehoben bist, ist es eher etwas "merkwürdig" (also welche im Bezug auf D3-Edit, wofür wir sogar extra ein "Sub-"Forum haben und DURCHAUS in ein Descentforum.de reingehören) wenn nicht sogar frech hier auch noch mit Hohn zu kommen. In anderen Foren wäre Dein Thema a) verschoben worden (das hole ich hiermit aber nach) oder eher b) gelöscht worden mit 'nem Kommentar wie "fugg off wid dad shiat yo sun of a beach".
Wenn jemand in diesem Forum die EINZIGEN 12 D3Edit-Freaks in D-A-CH anspricht ist das NICHT zu vergleichen mit einem Thema wofür es 123414 andere Foren und 2328597234985739823 andere Versierte gibt. Sicherlich hast Du hier trotzdem einige gute Antworten erhalten - die Community ist halt sau cool - aber diese drei Leute in Frage zu stellen - fast schon zu verhöhnen - die mit absolut berechtigter Kritik gekommen sind (so haben wie die Mopped-Leute etc.pp. ja auch gefragt ob das hier richtig ist) ist daneben.
Bedenke eher mal wie viele Leute hier lesen und warum und wieviele Leute hier in der Pilotenbar nun dieses Thema lesen und denken "was'n das für'n Scheiss - verkommt das Descentforum.de nun zum Nerd-Blaaaa-Forum, oder was? Dann brauch ich hier auch nicht mehr zu lesen". Sorry: Musste ich mal los werden.
|
|
Back to top |
|
|
Floyd Forum-Orakel
Joined: 20 Mar 2001 Posts: 2912
Location: Dresden, Germany
|
Posted: 29.07.2010, 00:53 Post subject: |
|
|
King Lo wrote: | Außerdem muss man nicht programmieren zu können, um abzuschätzen, wie sich die Hardware entwickelt oder um seine eigene Systemlast zu beobachten.
|
genau, und damit hast du dir dein eigenes wort im mund herumgedreht und die frage nun so hingebogen, wie ich es empfohlen habe
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You can attach files in this forum You can download files in this forum
|
|