1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
346
346
EMPFEHLEN
-
Ich habe einen MATLAB-Server der Anfragen über Java an MATLAB übergibt. Da MATLAB immer nur eine Anfrage bearbeiten kann, habe ich eine MASTER/Slave Serverstruktur überlegt.
D.h. der Master bekommt die Anfragen und leitet diese an die Slave Server weiter.
Könnte ich auch hier den "newSingleThreadExecutor()" verwenden?
(siehe auch http://www.tutorials.de/java/379845-...r-threads.html)
D.h. wären zwei SlaveServer verfügbar, müßte die Warteschlange ja nicht immer nur ein Thread zulassen , sondern zwei!
-
Ich brauche eigentlich nur eine Warteschlange in denen die Threads pausiert und warten bis sie herausgenommen und aktiviert werden.
Also etwas in der Form:
Klasse Network:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
public static Queue q = new LinkedList(); public void listen() { try { serverSkt = new ServerSocket(port); alive=true; new NetworkSlaveServerStatus(this).startThread(); while(alive){ Socket skt = serverSkt.accept(); NetworkThread netThread = new NetworkThread(skt,this); //hier werden die Anfragen erstellt q.add(netThread); synchronized(netThread){ while(getSlave1Status()|getSlave2Status() == true){ q.remove(); netThread.proceed(); // geht natürlich nicht soll nur die Idee darstellen } } } } catch (IOException ex) { } }
Klasse NetworkThread:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
private boolean threadStatus = true; public void run() { //.... synchronized (this){ while(threadStatus) { try { wait(); } catch (InterruptedException ex) { Logger.getLogger(NetworkThread.class.getName()).log(Level.SEVERE, null, ex); } } } } //.... public void pause() { threadStatus = true; } public void proceed() { threadStatus = false; notify(); }
Wie kann man jetzt einen bestimmten Thread aus in und aus einer Warteschlange einfügen/entnehmen?
-
06.09.11 14:36 #3
Hi,
was mich an dieser Stelle mal interessiert, warum arbeitest du mit Threads, wenn du diese eh nur hintereinander weg laufen lassen willst. Wenn du immer nur 1 Thread am laufen hast und dann wartest bis dieser fertig ist, kannst du das auch ohne Threads realisieren. Oder sehe ich das falsch?
Gruß
FabioGeändert von Fabio Hellmann (06.09.11 um 14:54 Uhr)
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Ein Kurzes Beispiel zur Erläuterung:
Der MasterServer bekommt ständig Anfragen von irgendwelchen Clients. Es sollen mindestens zwei Slaveserver verfügbar sein, die diese Anfragen bearbeiten können. Nach der Bearbeitung sollen die Antworten zurück an den Masterserver, der diese an die Clients zurückschickt.
Somit würden sich Threads, denke ich am besten eignen.
-
06.09.11 15:15 #5
Dann würde ich das aber von der Master-/SlaveServer-Client-Struktur ein bischen ändern. Wenn ich das bei dir richtig verstehe dann sieht das Design von dir momentan so aus, dass dann immer nur 1 SlaveServer am arbeiten ist.
Warum machst du es nicht so, dass du x-Anzahl von SlaveServern einsetzen kannst/könntest. Ich würde das ungefähr so realisieren:
Der MasterServer bekommt 2 Queues (eine für den Empfang von Requests und eine zum Versand): (Pseudocode)
Code :1 2
Queue anfragen = new Queue(); Queue rückgabe = new Queue();
In diesen Queues speicherst du einmal die Anfragen in einem Objekt mit der jeweiligen Client-Zugehörigkeit. Z.B. so: (Pseudocode)
In dem Object rückgabeWert speicherst du den Wert ab, den dir dein Thread (Slaveserver) einträgt. Sobald ein Request-Objekt in der Queue ist, wird ein Slaveserver gestartet, an diesen du das Request-Objekt übergibst - z.B. über den Konstruktor. Wenn der SlaveS. den Request abgearbeitet hat, dann wird er das RequestObject an den MasterServer zurückgeben und in die Rückgabequeue stecken. Diese muss dann natürlich auch vom MasterS. abgearbeitet werden.Code :1 2 3 4
class Request { Client client; Object rückgabeWert; }
Ich hoffe das war soweit verständlich. Falls nicht, dann frag einfach nach.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Ja, stimmt. Das ist war für den zweiten Schritt gedacht! Ich wollte es erstmal zum laufen bringen! Ich wollte dann für jeden SlaveServer einen WorkerThread erstellen, der aus der Queue die AnfrageThreads holt. (natürch wäre dies ein kritischer Abschnitt)
Das geht leider nicht, da MATLAB eine relativ lange Startphase hat, müssen die SlaveServer bereits gestartet sein, d.h. ich weiß zu jeder Zeit wieviele SlaveServer aktiv sind.
Das wird ein Problem, wenn man deine Idee umsetzen will. (Wenn ich dich richtig verstanden haben!)
-
07.09.11 07:50 #7
Ok. Du kannst es ja auch so machen, dass die SlaveServer auf die Anfrage-Queue listen und sobald eine Anfrage vorhanden ist, nimmt derjenige SlaveServer der zu erst war sich diese Anfrage und bearbeitet diese. Dann müsste es auch funktionieren
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
Ähnliche Themen
-
[MySQL] Master/Slave - Was muss man beachten beim Verbinden und bei den Abfragen?
Von WEBi im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 19.10.10, 12:11 -
MySql Master / Slave - Connections C#
Von tecla im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 19.10.09, 11:46 -
MySQL, Master-Slave-Replikation
Von rtd1978 im Forum Linux & UnixAntworten: 0Letzter Beitrag: 25.04.08, 11:27 -
Master/Slave -Startbildschrim?
Von LostProphet im Forum HardwareAntworten: 2Letzter Beitrag: 08.01.05, 13:48 -
Erklärung: Master / Slave, Primary Ma /Sl...
Von Consti im Forum HardwareAntworten: 9Letzter Beitrag: 03.01.05, 19:00





Zitieren
Login





