# Parallelisierung mit RMI ???



## Azrazel (20. Mai 2011)

Hallo leute,
ich bin ein "relativer" Anfänger mit Java und arbeite an meiner Uni im Matheinstitut. Hier helfe ich meinem Prof bei der Entwicklung eines Matheprogramms welches Langwierige Approximationsalgoritmen berechen soll (und es zum teil auch schon tut )
nun zu meinem Problem:
ich soll nun teile des Programmes insofern "parallelisieren", dass langwierige und rechneraufwendige berechnungen seperat stattfinden und man trotzdem noch nebenbei andere tätigkeiten mit dem programm machen kann z.b. analysen schon vorher berechneter kurven. 
hierbei soll die berechnung jedoch nicht als thread aufgefasst werden sondern als eigenständiger prozess um nicht in den "ressourcenkampf" mit anderen threads des Hauptprogrammes zu kommen und bevorzugt als prozess behandelt zu werden. (daher scheidet wohl multithreading aus)
nun wollte ich das ganze eventuell mit RMI verwirklichen mit folgender Idee :

Der hauptclient beinhaltet das gesammte interface (programmiert mit Swing).
der Hauptserver beinhaltet die reaktionen auf meine eingaben z.B. auf die verschiedenen buttons.

drücke ich nun z.b. den button zur berechnung einer Kurve soll der Hauptserver einen neuen "Subserver" starten der die berechnung durchführt den wert der berechnung zurückliefert und dann den "subserver" wieder beendet. 

nun die frage ob ein solcher subserver überhaupt als eigenständiger prozess aufgefasst werden würde oder ob er ein thread des Mainprogrammes wäre?
und wie könnte ich soetwas nachprüfen?
oder habt ihr eventuell andere ideen wie ich eine methode als prozess deklarieren kann und nicht als thread um dem "Wettbewerb" der verschiedenen threads entgegenzuwirken ?
danke für antworten und anregungen 
grüße Azra


----------



## Wildcard (20. Mai 2011)

> drücke ich nun z.b. den button zur berechnung einer Kurve soll der Hauptserver einen neuen "Subserver" starten der die berechnung durchführt den wert der berechnung zurückliefert und dann den "subserver" wieder beendet.


Wenn du damit meinst das dieser subserver auf der gleichen Maschine gestartet werden soll, dann kannst du dir die Arbeit sparen, dann kannst du auch gleich Threads verwenden und sparst der den Overhead der Interprozesskommunikation.

Wenn du meinst der Master delegiert Tasks an eine andere Maschine, dann fehlt dir vielleicht das Stichwort Grid Computing, oder Cluster Computing. Sowas wie Hadoop vielleicht?
Welcome to Apache Hadoop!


----------



## Azrazel (20. Mai 2011)

Danke für die Antwort
das ganze soll schon auf einer Maschine stattfinden.
eine berechnung kann nur halt sehr viel zeit in anspruch nehmen soll aber vorrangig CPU leistung bekommen. Mein Prof meinte, dass die jeweiligen threads sich die zugeteilte rechenzeit des Prozesses teilen. daher die berechnung als eigener prozess wahrscheinlich bessere chancen hat mehr CPU leistung zu bekommen. daher möchte ich diese berechnungen als eigenen prozess starten lassen.


----------



## Wildcard (20. Mai 2011)

Bringt IMO gar nichts. Jeder Thread eines Prozesses kann auf seinem eigenen Core laufen wenn genügend Kerne vorhanden sind. Mehrere Prozesse zu haben macht den Kontextswitch nur teurer, bringt Kommunikationsoverhead, Speicheroverhead und bedeutet mehr Implementierungsaufwand.


----------

