Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Für jeden Client einen JobThread oder nur einen JobThread? (https://www.delphipraxis.net/122154-fuer-jeden-client-einen-jobthread-oder-nur-einen-jobthread.html)

Thomas83 10. Okt 2008 10:40


Für jeden Client einen JobThread oder nur einen JobThread?
 
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?

Thomas83 10. Okt 2008 13:08

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
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???

Apollonius 10. Okt 2008 13:12

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
Warum speicherst du deine Jobs überhaupt in einer Stringliste? Spricht etwas dagegen, für jeden einzelnen Auftrag ein Objekt in einer Warteschlange abzulegen?

Thomas83 10. Okt 2008 13:17

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
weil ich in der stringliste auch den socket speicher, wollte nicht extra ein objekt bzw. eine klasse erstellen.

Thomas83 10. Okt 2008 13:20

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
was meinst du mit Warteschlange? weil die objekte muss ich ja auch irgend wo speichern, ok könnte es auch in einem array ablegen.....

Apollonius 10. Okt 2008 13:24

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
Warteschlange. Diese Datenstruktur hat auch den Vorteil, dass sie sich ohne Locks implementieren lässt.

Thomas83 10. Okt 2008 13:28

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
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.....

alzaimar 10. Okt 2008 13:49

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
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.

Thomas83 10. Okt 2008 13:57

Re: Für jeden Client einen JobThread oder nur einen JobThrea
 
das ist eine gute idee, wenn also ein Job komplett ist wird dieser in die Warteschlange verschoben.
Danke euch beiden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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