AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Für jeden Client einen JobThread oder nur einen JobThread?
Thema durchsuchen
Ansicht
Themen-Optionen

Für jeden Client einen JobThread oder nur einen JobThread?

Ein Thema von Thomas83 · begonnen am 10. Okt 2008 · letzter Beitrag vom 10. Okt 2008
Antwort Antwort
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

Für jeden Client einen JobThread oder nur einen JobThread?

  Alt 10. Okt 2008, 11:40
hi,

zur Zeit ist es so das wenn ein Client (c1) eine Job zum Server sendet diese in einer Stringliste gespeichert wird (z.B index 0), sendet ein weitere Client (c2) einen Job wird dieser auch in der Stringliste als neuer eintrag gespeichert (index 1). Sendet C1 jetzt wieder einen Job so wird dieser an index 0 angefügt. Somit wird erst der Job von C2 bearbeitet wenn C1 nichts mehr hat.

Sollte ich für jeden Client einen Jobthread anlegen?
Oder für jeden Job einen extra eintrag in der stringliste?

Was meint ihr?
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#2

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:08
servus,

habe es jetzt so gelöst und würde gerne eure meinung hören....
Es gibt einen JobThread im Server. Dieser speichert die jobs in einer Stringliste ab

C1 = "job"
C2 = "job" "job"
C3 = "job"
C4 = "job" "job" "job" "job"
C5 = "job" "job" "job"

im Thread wird dann in einer for schleife jedes element bearbeitet.
Also wird erst der erste job von c1 bearbeitet dann c2, c3, c4 etc.

Somit ist gewähleistet das immer der erste job einens clients bearbeitet wird und jeder client nacheinander bearbeitet wird so wie er sich angemeldet hat.....
gibt es keinen Job mehr wird der Eintrag gelöscht.

Somit brauche ich auch nicht für den Client einen Thread und habe ressourcen gespart....

Was meint ihr dazu???
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:12
Warum speicherst du deine Jobs überhaupt in einer Stringliste? Spricht etwas dagegen, für jeden einzelnen Auftrag ein Objekt in einer Warteschlange abzulegen?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#4

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:17
weil ich in der stringliste auch den socket speicher, wollte nicht extra ein objekt bzw. eine klasse erstellen.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#5

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:20
was meinst du mit Warteschlange? weil die objekte muss ich ja auch irgend wo speichern, ok könnte es auch in einem array ablegen.....
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:24
Warteschlange. Diese Datenstruktur hat auch den Vorteil, dass sie sich ohne Locks implementieren lässt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#7

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:28
danke werde es mir mal anschauen.

Es kann vorkommen das ein Job nicht immer ganz übertragen wird z.B Job3 -> "Jo" "b3". Da müste ich den Job irgend wo zwischen speichern. In einer Stringliste kann ich mit IndexOfObjekt(socket) die jobliste finden und einfach den "rest" vom job anhängen.....
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:49
Hallo Thomas,

das Du eine Stringliste verwendest, um die Jobs erstmal zu empfangen, ist eine ganz gute Idee. Sie wird Dir jedoch Kopfzerbrechen bereiten, wenn Du viele (>1000) Clients hast, weil das 'IndexOfObject' die ganze Objekteliste durchsucht (und etwas 'lahm' ist).

Ich würde die Stringliste nur verwenden, um die einzelnen Jobs vollständig zu empfangen. Sobald ein Job vollständig angekommen ist, legst Du ihn in der Warteschlange ab. Das kann auch eine einfache Threadlist sein, aber das nur am Rande. Anschließend löscht Du den Eintrag in der Stringliste* (siehe unten).

Dein Workerthread schnappt sich nun einfach den nächsten Job aus der Warteschlange und arbeitet ihn ab.

Vielleicht interessiert Dich eine Workerthreadpool-Klasse, wobei mehrere Threads eine gemeinsame Jobliste abarbeiten.

http://www.delphipraxis.net/internal...t.php?t=111982


---
*
Eine Stringliste ist hier suboptimal, weil noch etwas Overhead für die Stringbehandlung hinzukommt. Als Performancefetischist ist soetwas nicht zu tolerieren, als praktisch veranlagter Realist schon. Bei sehr vielen Clients in einer Hochgeschwindigkeitsumgebung solltest Du hier nachbessern.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#9

Re: Für jeden Client einen JobThread oder nur einen JobThrea

  Alt 10. Okt 2008, 14:57
das ist eine gute idee, wenn also ein Job komplett ist wird dieser in die Warteschlange verschoben.
Danke euch beiden!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz