AGB  ·  Datenschutz  ·  Impressum  







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

Multithreading mit OmniThreadLibrary

Ein Thema von Ralle1 · begonnen am 23. Jun 2015 · letzter Beitrag vom 23. Jun 2015
Antwort Antwort
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#1

Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 13:33
Hallo!

Ich möchte mit Hilfe der OmniThreadLibrary einen Multi-User-Betrieb simulieren.

Ich habe eine Procedure, die einen Connect auf meine Datenbank erstellt und fest definierte Lese/Schreibe-Zugriffe durchführt.
Diese soll nun von n Threads (=simulierte User) gleichzeitig durchgeführt werden.

Gemessen werden soll die Zeit, bis alle n Threads abgelaufen sind. Wichtig ist, dass sie gleichzeitig und nicht nacheinander laufen sollen.

OmniThreadLibrary scheint mir hierzu das richtige Werkzeug, habe es aber noch nie benutzt und komme mit den gefundenen Beispielen nicht klar.
Kann mir jemand ein passendes Beispiel hierfür geben oder zumindestens einen Ansatz?

Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#2

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 13:52
Im Wesentlichen muss jeder Thread seine eigene Connection zur Datenbank und die zugehörigen Datenzugriffsobjekte haben. Einen groben Umriss einer solchen Anwendung beschreibt dieser Artikel, bei dem Webseiten-Inhalte abgerufen und in Datenbanken geschrieben werden. Die tatsächliche Implementierung ist natürlich von der verwendeten DB-Zugriffsschicht abhängig. Dazu hast du dich aber noch nicht geäußert.

Wichtig ist, dass sie gleichzeitig und nicht nacheinander laufen sollen.
Es können natürlich nur soviele Threads gleichzeitig laufen, wie die Hardware hergibt. Was ja nicht heißt, daß mehr Threads gestartet sein können und eine Verbindung offen halten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 14:44
Die DB-Zugriffsschicht habe ich bewusst nicht erwähnt, da es mir tatsächlich nur um den Thread-Ansatz ging. Jeder Thread muss natürlich autark funktionieren.

Es müsste doch möglich sein, dass innerhalb der Threads ProcessMessages durchgeführt wird, so dass wirklich mehrere Dinge nicht gleichzeitig aber quasi "nebeneinander" her laufen, oder sehe ich das falsch?
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#4

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 14:56
Es gibt übrigens im Verzeichnis "Tests" noch viele Beispiele. Die sind aber etwas verwirrend, da sie eigentlich erst ab der Nummer ca 35 los gehen. Die mit einer kleineren Nummer sind veraltet.

Für OTL benötigt man etwas Geduld, um es zu verstehen. Nicht gleich aufgeben!
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 15:02
Es müsste doch möglich sein, dass innerhalb der Threads ProcessMessages durchgeführt wird, so dass wirklich mehrere Dinge nicht gleichzeitig aber quasi "nebeneinander" her laufen, oder sehe ich das falsch?
Nein, Nein und nochmal Nein!

Threads laufen nebeneinander her, aber wann diese laufen hängt vom Betriebssystem (Scheduler) und von den zur Verfügung stehenden CPU-Kernen ab.

Ja, es gibt etwas um das System zum Threadwechsel zu animieren mittels TThread.Yield (was eigentlich nichts anderes als Sleep(0) macht).

Aber eine Message-Warteschlange zum Abarbeiten gibt es hier nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 15:33
Wozu braucht man hier die OmniThreadLibrary?

Erstelle dir eine Liste mit eigenen abgeleiteten Threads, übergebe in deren Constructor die notwendigen Daten für die Datenbankverbindung und dann lass loslaufen.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Multithreading mit OmniThreadLibrary

  Alt 23. Jun 2015, 15:38
Um die Verwirrung etwas zu mindern eine kleine Erklärung die hoffentlich hilft:

Generell (bei nur einem CPU-Kern z.B.) laufen Prozesse und Threads nicht WIRKLICH gleichzeitig.
Auch wenn du Notepad, Firefox und World of Warcraft offen hast läuft immer nur eins dieser Programme zu einem bestimmten Zeitpunkt.
Das Betriebssystem wechselt nur so schnell zwischen den Prozessen/Threads hin und her, dass das nicht auffällt und es sich anfühlt als würden
diese Prozesse/Threads alle gleichzeitig/parallel ausgeführt werden.

Uwe Raabes Anmerkung war, dass ECHTE Gleichzeitigkeit nur mit mehreren CPU-Kernen möglich ist.
Also 1 Kern führt Notepad aus und der andere führt GLEICHZEITIG Firefox aus.
Und auch dann können nur so viele Prozesse/Threads gleichzeitig ausgeführt werden wie die CPU Kerne besitzt.

Es ist halt die Frage was du genau testen willst. Mit einer Quadcore CPU kannst du genau genommen NICHT simulieren dass
8 verschiedene Benutzer ABSOLUT gleichzeitig auf die Datenbank zugreifen, weil es in der Praxis so sein wird dass
(im Idealfall) 2x 4 Zugriffe hintereinander ausgeführt werden (innerhalb weniger ms).

Wenn du den Datenbankserver bzw. die Datenbank nur testen willst ob sie eine gewisse Belastung aushält musst
du dir darüber aber in meinen Augen keine Gedanken machen.

Application.Processmessages o.ä. hat in einem Thread nichts zu suchen. Threads werden auch so schon (pseudo-)parallel ausgeführt! (s.o.)

Habe die OTL noch nicht benutzt aber je nachdem solltest du erst mal mit TThread o.ä. rumexperimentieren, da dir in dem Bereich Threads wohl
noch ein Stück Erfahrung und Wissen fehlt und dich die OTL möglicherweise nur noch mehr verwirren könnte.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  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 23: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