Socket Thread Pooling

Helgon

Bekanntes Mitglied
Hey, ich hab folgende Frage/Problem.

In JavaInsel5 wird ganz kurz was von wegen Thread Pools erzählt (nur kurz angerissen)

JavaInsel5 hat gesagt.:
Ein anderer Punkt ist die Tatsache, dass Server im Allgemeinen multithreaded ausgelegt sind, damit sie mehrere Anfragen gleichzeitig ausführen können. Die Threads werden nicht pro Anfrager erzeugt, da dies zu teuer ist, sondern einem Thread-Pool entnommen. Mit Java 5 gibt es hierfür die Thread-Pool-Klasse, die diese Arbeit vorzüglich bewältigt.

Also mal gegoogelt und herausgefunden was das eigentlich genau ist und wofür man es verwendet etc.

Dann hab ich nach Beispielen gesucht und bin auch wieder hier gelandet (alter Thread) und dann wurde dort gesagt, dass man für so etwas (Thread Pooling) Frameworks wie Netty oder Mina verwendet.

Dann stellen sich mir ein paar Fragen. Laut dem was ich so gelesen hab macht es irgendwie gar kein Sinn überhaupt auf Thread-Pooling zu verzichten?! Oder hat es irgendwelche Nachteile gegenüber normalem Multithreading?

Und bei was für "Größenordnungen" verwendet man Netty oder Mina? Immer? Auch wenn ich nur irgend ein kleines Multiplayer Snake bastel (nurn Beispiel bezüglich der Komplexität), oder reicht es dort vollkommen aus wenn man dieses Thread Pooling selbst implementiert?

Grüße
 
G

Gast2

Gast
Netty und Mina bieten deutlich mehr als einen Thread Pool!

Auch wenn es nie verkehrt ist sich mit solchen Frameworks zu beschäftigen - für ein simples kleines Spielchen braucht man sie nicht unbedingt. Aber ich finde das man in der Regel schneller mit Netty das Netzwerkstack eines Spieles zusammen gebaut hat als wenn man vom Socket rauf alles selber machen muss.

Multithreading brauchst du sobald du mit non blocking sockets arbeiten willst. Und dann ist es in der Regel auch sinnvoll Thread Pools zu verwenden.
 

Helgon

Bekanntes Mitglied
Danke für die Antwort.

Aus dem letzten Satz schließe ich dann mal, was ich schon vermutet habe: Eigentlich immer Thread Pooling verwenden?

Grüße
 
G

Gast2

Gast
Sobald ich mehr mehr als einen Thread brauche (Server für mehrere Clients) würde ich mit einem Thread Pool arbeiten.

Ich nehme aber eigentlich für alles Netty und sorge mich da nicht weiter drum ;)

Hab einmal ein eigenes NIO Socket Framework geschrieben - danach nie wieder...
 

Kr0e

Gesperrter Benutzer
Würde auch zu ExecuterService's (ThreadPools) raten.

Immer dran denken, dass Aufgaben die "zusammengehören", sprich Ressourcen teilen IMMER im selben Thread ausgeführt werden sollten. Es gibt nur eine Sache die "teurer" ist als Synchronisation und das ist Thread-Kontextwechsel. Sprich wenn ein Thread die Arbeit eines anderen Threads übernimmt oder anders ausgedrückt:

Du hast ein komplexes Problem das sagen wir 10 min braucht. Nun willst du das in Häppchen zerlegen und immer nur alle 100 ms daran weiterarbeiten, damit vlt andere Probleme parallel ausgeführt werden können. Dann versuche alle 100ms dafür DEN SELBEN Thread zu nehmen und NICHT einen, der vlt grad nichts zu tun hat. Das interne Thread-Scheduling explodiert sonst und deine Thread tauschen nur noch ihre lokalen Caches aus und das Programm stellt sich selbst ein bein ;)

Macht Netty und Mina intern auch so. Jeder Client wird von EINEM Thread bedient. Jeder Thread kann beliebig viele Clienten haben. Die interne Verwaltung sorgt dafür, dass jeder Thread möglichst gleiche viele Clienten hat.
 

Helgon

Bekanntes Mitglied
Danke für die Antwort. Wieder was gelernt und es erleuchtet mich :)

Dann mal ne andere Frage.

Ich möchte als Übung ein kleines Spiel schreiben (übe dann gleichzeitig auch OpenGL :)).

Ich weis, dass es dazu bereits einige Threads gibt (werde die SuFu gleich mal bemühen), aber wenn der Thread hier eh schon offen ist, stelle ich mal die Frage ob auch in diesem Fall Thread-Pooling angebracht ist.

Soweit ich das auf einer englischsprachigen Seite verstanden hab, legt man ja mit Thread-Pooling auch die maximalen, parallelen Zugriffe fest. Verwendet man Thread-Pooling also auch in einem Spiel (um z.B. die maximale Spieleranzahl auf einem Server) zu limitieren?


Grüße
 

Kr0e

Gesperrter Benutzer
In Spielen ist das nur begrenzt einsetzbar. Also klar, im Netzwerkpart des Servers auf jeden Fall. Aber für das Spiel selbst könnte man höchstes Dinge auslagern wie Modelloading/TextureLoading. OpenGL ist nämlihc nicht Threadsafe. Sprich wenn man einmal OpenGL initialisiert hat, sind alle Befehle auch nur in diesem Thread gültig. In sofern ist alles was mit Rendern zu tun hat (Spiel, GUI, etc.) nicht auslagerbar.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Thread und Ratelimiter Netzwerkprogrammierung 4
F Thread "extern" beenden Netzwerkprogrammierung 3
OnDemand Linux RAM per Thread Netzwerkprogrammierung 3
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
C Thread Netzwerkprogrammierung 9
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
S Socket ThreadPool oder Thread pro Client? Netzwerkprogrammierung 11
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
P Wie spreche ich einen Thread an? Netzwerkprogrammierung 20
M Thread Scheduler Java 5.0? Netzwerkprogrammierung 2
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
B Socket Thread handling / Reader init Netzwerkprogrammierung 8
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
B callback thread udp Netzwerkprogrammierung 2
D RMI und Thread Netzwerkprogrammierung 4
S Kommunikationsproblem, Thread und manuel Netzwerkprogrammierung 4
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
K ein Thread pro Stream Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
D Thread problem Netzwerkprogrammierung 3
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Thread Transport Netzwerkprogrammierung 6
S Socket Thread in Schleife Netzwerkprogrammierung 4
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T synchronized mit thread und rückgabe Netzwerkprogrammierung 4
Q Thread und Sockets... Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
PAX Outputstream von anderem Thread verwenden lassen Netzwerkprogrammierung 5
C Server mit Multithreading (Thread-Pool) Netzwerkprogrammierung 2
E java.lang.NullPointerException aber nur wenns im Thread läuf Netzwerkprogrammierung 4
F EIN Thread in RMI auf Serverseite Netzwerkprogrammierung 3
G Server Thread beenden Netzwerkprogrammierung 16
T Socket-Thread: Designfrage Netzwerkprogrammierung 14
S Mit Thread arbeitende Maschine Netzwerkprogrammierung 6
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
K Selbe Streams mehrfach nutzen (zusätl. Thread) Netzwerkprogrammierung 6
ven000m Thread Frage Netzwerkprogrammierung 11
B Thread.start() (run()) excption Netzwerkprogrammierung 2
M Thread läuft nicht weiter Netzwerkprogrammierung 2
B NullPointerException | Thread Netzwerkprogrammierung 4
U Current thread not owner Netzwerkprogrammierung 3
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6
J RMI - (RemoteException occurred in server thread) Netzwerkprogrammierung 2
S Webserverprogrammierung: Thread-Beschränkung Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
F problem mit thread bzw. netzwerkverbindung! Netzwerkprogrammierung 3
L netzwerk mit thread Netzwerkprogrammierung 3
G RMI thread safe ? Netzwerkprogrammierung 11
A Thread gibt Nachrichten mehrmals aus (Messenger in Java) Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben