Descentforum.DE Forum Index Descentforum.DE
Search | FAQ | Memberlist | Usergroups | Newsfeed Newsfeed  Register
Profile | Log in to check your private messages | Log in 
Chat | D3-Tactics | Downloads | Map | Links | Serverlist | Teamspeak 

Wie viele Threads erwartet ihr von nem guten Programm?

 
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Tech - Support - Forum
View previous topic :: View next topic  
Author Message
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 25.07.2010, 22:11    Post subject: Wie viele Threads erwartet ihr von nem guten Programm? Reply with quote

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... Smilie
  • 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
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 25.07.2010, 22:41    Post subject: Reply with quote

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 zwinkern.
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
View user's profile Send private message
Do_Checkor
Administrator


Joined: 19 Nov 2000
Posts: 7772
Location: Oldenburg (Oldb.)

PostPosted: 25.07.2010, 22:45    Post subject: Reply with quote

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%

Winken
Back to top
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 25.07.2010, 22:53    Post subject: Reply with quote

sind doch mehr als die hälfte zwinkern
Back to top
View user's profile Send private message
Pffzzhh
Forum-Nutzer


Joined: 04 Jun 2007
Posts: 138
Location: Braunschweig

PostPosted: 26.07.2010, 07:30    Post subject: Reply with quote

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
View user's profile Send private message
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 26.07.2010, 10:28    Post subject: Reply with quote

Naja, zu man *kann* wohl schon 32.000 erzeugen, aber die Frage ist nur, wann der Overhead zu viel wird Winken

@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
View user's profile Send private message
Maulwurf
aka Seeker


Joined: 17 Jul 2001
Posts: 2191
Location: Stuttgart

PostPosted: 26.07.2010, 10:41    Post subject: Reply with quote

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
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 26.07.2010, 14:21    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
Thomas
Forum-Nutzer


Joined: 07 Feb 2008
Posts: 245

PostPosted: 26.07.2010, 16:15    Post subject: Reply with quote

Wollt auch grad mit einer Erörterung anfangen, hab aber dann gesehen, daß Maulwurf das schon getan hat. Smilie

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. Winken

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? Winken

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. Winken
Back to top
View user's profile Send private message
sattmacher
Forum-Nutzer


Joined: 18 Aug 2001
Posts: 334
Location: Erkner

PostPosted: 27.07.2010, 18:51    Post subject: Reply with quote

Geschockt Geschockt Geschockt Geschockt Genau das wollte ich auch sagen,"ES ZZZRIEEETTT SO AUS;DAS HIER DAS FALSCHE FORUM FÜR DEN "ZRIEEETTTT IST" Ausrufezeichen Ausrufezeichen Ausrufezeichen Ausrufezeichen Idee Mit den Augen rollen Mit den Augen rollen Mit den Augen rollen
_________________
"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
View user's profile Send private message Send e-mail
King Lo
Forum-Nutzer


Joined: 14 Mar 2006
Posts: 320
Location: Stuttgart, BW

PostPosted: 28.07.2010, 14:57    Post subject: Reply with quote

@Floyd, Checkor, Mauli, sattmacher:
Die Frage war nicht: "Braucht King Lo jemanden, der ihm prohpezeit, dass ihm vielleicht wenige antworten könnten?"... Winken 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
View user's profile Send private message
Maulwurf
aka Seeker


Joined: 17 Jul 2001
Posts: 2191
Location: Stuttgart

PostPosted: 28.07.2010, 18:28    Post subject: Reply with quote

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
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 28.07.2010, 21:40    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
Pffzzhh
Forum-Nutzer


Joined: 04 Jun 2007
Posts: 138
Location: Braunschweig

PostPosted: 28.07.2010, 22:21    Post subject: Reply with quote

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
View user's profile Send private message
Marix
Forum-Nutzer


Joined: 30 May 2001
Posts: 1017
Location: Germany

PostPosted: 28.07.2010, 23:00    Post subject: Reply with quote

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
View user's profile Send private message
Do_Checkor
Administrator


Joined: 19 Nov 2000
Posts: 7772
Location: Oldenburg (Oldb.)

PostPosted: 29.07.2010, 00:46    Post subject: Reply with quote

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?"... Winken
...

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
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 29.07.2010, 00:53    Post subject: Reply with quote

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 zunge strecken
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Tech - Support - Forum All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
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
PayPal


Descent is a trademark of Interplay Productions.
Descent, Descent II are © Parallax Software Corporation.
Descent III is © Outrage Entertainment.
Descentforum.DE and Descentforum.NET is © by Martin "Do_Checkor" Timmermann.
Powered by phpBB © 2001-2008 phpBB Group