AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WorkerThread erweitern

Ein Thema von SvB · begonnen am 26. Okt 2010 · letzter Beitrag vom 27. Okt 2010
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: WorkerThread erweitern

  Alt 26. Okt 2010, 22:18
Tja, da fängt es dann schon an, ich bin nicht unbedingt der Crack.
Da muss ich dann mal schauen, für was das gut ist und was ich damit machen kann, um zu meiner Lösung zu kommen.
Das werde ich dann aber wohl erst morgen machen.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: WorkerThread erweitern

  Alt 26. Okt 2010, 22:26
Okay, kurz angerissen. Du würdest bspw. MSDN-Library durchsuchenTryEnterCriticalSection (ab NT4) benutzen um einen kritischen Abschnitt zu betreten. Schlägt es fehl, würde der Thread nix machen, wäre also für den nächsten Auftrag frei. Funktioniert es, wärst du sicher allein in dem kritischen Abschnitt zu sein, so wie du es wolltest.

Nähmen wir mal an, daß du mehr als eine Auftrag brauchst, aber die Anzahl dennoch unter der Anzahl der Threads halten willst, würden sich MSDN-Library durchsuchenSemaphoren anbieten.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 07:20
Danke erst mal. Da das für mich Neuland ist, muss ich mich in die Materie erst mal etwas einlesen.

Ich muss halt sicherstellen, dass folgendes funktioniert: ThreadPool mit z.B. 5 Threads. Dann habe ich JobA, JobB, JobC. JobA macht was in der Datenbank, JobB ließt Dateien aus einem Ordner analysiert diese und schreibt bestimmte Daten in die DB, JobC macht auch irgend etwas.
Jetzt ist es so, dass ich 2x JobA erzeuge und in die JobListe hinzufüge. Der WorkerThread verteilt die dann ja auf zwei Threads und diese werden bearbeitet. Dann schiebe ich noch 5x JobB in die JobListe und normalerweise würden dann drei davon auf die verbleibenden wartenden drei Threads aufgeteilt, die zwei restlichen Jobs bleiben in der Liste, bis wieder ein Thread frei ist. Es soll aber so sein, dass JobB nicht auf die 3 verbleibenden Thread aufgeteilt werden, sondern festgestellt wird, dass JobB immer nur einzeln abgearbeitet werden, d.h. es wird nur ein weiterer Thread mit einem Auftrag belegt. Es bleiben dann noch zwei wartende Threads übrig, die dann noch weitere eintreffende JobsA oder JobsC abarbeiten könnten. Wenn dann der eine JobB abgearbeitet wurde, kann den nächste JobB aus der Liste geholt werden usw.

Ich habe mal grob Deine Anhaltspunkte durchgestöbert und ich denke, dass ich mit den Semaphoren da am besten weiterkomme. Ich setze mich einfach mal dran und probiere das aus.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Alt 27. Okt 2010, 09:00     Erstellt von rayjian
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 09:13
Wie gesagt, für mich ist es im Moment schwierig zu entscheiden, wie ich vorgehen könnte, da ich bisher wede etwas mit Mutex, CriticalSection, Semaphoren gemacht habe.
Ich muss mich erst mal in das Thema einarbeiten.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 10:06
Wie gesagt, für mich ist es im Moment schwierig zu entscheiden, wie ich vorgehen könnte, da ich bisher wede etwas mit Mutex, CriticalSection, Semaphoren gemacht habe.
Ich muss mich erst mal in das Thema einarbeiten.
Okay. Wenn du C/C++ kannst, empfehle ich "Windows System Programming" und wenn du ein wenig mehr Theorie haben willst "The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications".
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: WorkerThread erweitern

  Alt 27. Okt 2010, 11:15
Jetzt habe ich mir mal TCriticalSection angesehen und in der Delphi Hilfe steht folgendes:
Zitat:
Mit TCriticalSection können Operationen abgesichert werden, die nicht durch den Ausführung eines bestimmten Codeabschnitts durch einen anderen Thread unterbrochen werden dürfen. Kritische Abschnitt arbeiten wie Gates, die jeweils nur einen einzelnen Thread durchlassen. Da die Ausführung anderer Threads blockiert wird, verringert sich die Leistung der Anwendung erheblich, wenn kritische Abschnitte zu häufig eingesetzt werden.
Das bedeutet, dass wenn mein JobB gestartet werden würde, dass die anderen Threads dann solange unterbrochen werden, bis der JobB abgearbeitet ist. Das wäre schlecht, denn die anderen Threads sollen in dieser Zeit noch JobA und JobB abarbeiten.

Dann schaue ich mir mal das nächste an.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  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 10:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz