# Thread Transport



## Samoniec (30. Dez 2010)

Hallo habe mal eine Frage zu einer Idee:

Ausgangssituation:
Zwei Server, auf diese werden Aufgaben verteilt. Jede Aufgabe befindet sich in einem eigenen Thread.

Frage / Idee:
Ist es möglich einen kompletten Thread sozusagen zu packen über TCP oder UDP an den zweiten server zus chicken?
Und kann dieser ihn einfach entpacken und wieder starten, bzw weiterlaufen lassen?

Das Ganze soll eine dynamische Lastverteilung ermöglichen. 

Welche Möglichleiten gibt es für solch einen Ansatz?


----------



## tuxedo (30. Dez 2010)

AFAIK lassen sich Threads nicht in andere JVM-Instanzen "teleportieren". Du könntest aber den Task (das Runnable-Objekt), den der Thread bearbeitet etwas abstrahieren und es so ermöglichen, dass man den Task an beliebiger Stelle anhalten und speichern kann, so dass ein anderer Thread, sei es in der gleichen JVM oder in einer anderen auf einem anderen Rechner, den Task weiter bearbeiten kann.

Ergo: Du musst dir das selbst basteln. Der Thread an sich kann so nicht angehalten, transportiert und wieder gestartet werden.


- Alex


----------



## Samoniec (12. Feb 2011)

Hm ok. 

Muss ich mir sozusagen eine Containerklasse bauen die alles Beherbergt was ich zum Arbeiten benötige und das immer einem Thread zum  arbeiten geben. Der arbeitet gleich auf diesem Container oder extrahiert eben alles aus diesem Container.


----------



## tuxedo (12. Feb 2011)

Jepp. Das Stichwort heisst "Runnable", sowie "ExecutorService".

Hilfreiche Links:

* Runnable (Java Platform SE 6)
* ExecutorService (Java Platform SE 6)

Das Runnable-Objekt bereitest du auf Client-Seite vor, schickst es zum Server, und der Steckt es dann in einen ThreadPool, erzeugt durch den ExecutorService.

Fertig.

- Alex


----------



## Samoniec (12. Feb 2011)

Danke, werde ich mir mal ansehen.


----------



## FArt (14. Feb 2011)

Samoniec hat gesagt.:


> Hallo habe mal eine Frage zu einer Idee:
> 
> Ausgangssituation:
> Zwei Server, auf diese werden Aufgaben verteilt. Jede Aufgabe befindet sich in einem eigenen Thread.
> ...



Hört sich nach einem sehr ungünstigen Ansatz an. Lastverteilung sollte dir eine passene Laufzeitumgebung liefern, z.B. ein Applikationsserver oder ein anderer Container.
Einfache Lastverteilung erreicht man durch einfaches verteilen von Anfragen, ohne dass die einzelnen Instanzen voneinander wissen.


----------



## Semox (23. Feb 2011)

Hi

Leider kann man keine Threads packen und verschicken. Aus dem Grunde, daß Threads ein Teil eines Prozesses sind. Also leichtgewichtige Prozesse. Der "schwergewichtige" Prozeß selbst läuft in einem RAM auf einem Computer mit einem Adreßraum, der nicht teleportiert werden kann. Es sei denn Du benutzt ein Grid - so etwas was Supercomputer können, wo sich mehrere Computer, bzw. CPUs und deren Busse einen gemeinsamen RAM bzw. einen Adreßraum teilen können.

Ansonsten könntest Du mal mit RMI arbeiten und ein oder hunderte gleicher Objekte, die einen bestimmten Zustand erreicht haben sollen und parallel berechnet werden weiterleiten und verarbeiten. Sowas passiert ihn ähnlicher Weise beim Cloud-Computing.

Oder schau mal hier: JPPF Home

Viele Grüße und Erfolg,
Semo


----------

