AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language TMonitor vs. TMultiReadExclusiveWriteSynchronizer
Thema durchsuchen
Ansicht
Themen-Optionen

TMonitor vs. TMultiReadExclusiveWriteSynchronizer

Ein Thema von AndyDF · begonnen am 29. Sep 2016 · letzter Beitrag vom 30. Sep 2016
Antwort Antwort
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#1

TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 09:42
Delphi-Version: 10 Seattle
Hallo zusammen,

anstelle einer TCriticalSection verwende ich schon immer TMonitor, da TMonitor von der Performance her ganz gut sein soll und auch schöner einzusetzen ist.
Jetzt habe ich aber öfter den Fall, dass ich nur wenige Male die Ressource schreiben muss aber sehr oft lesen muss.

Hierzu verwende ich gerne TMultiReadExclusiveWriteSynchronizer.

Was haltet ihr davon oder würdet ihr hierfür auch TMonitor verwenden oder ganz eine andere Lösung?
Ich weiß nicht wie sich TMultiReadExclusiveWriteSynchronizer aus Performance-Sicht schlägt. Jemand Erfahrung?
Andreas Blenk
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 09:59
Praktische Performancewerte kann ich auch nicht vorweisen. Allerdings wird durch die Tatsache, daß konkurrierende Reads nicht blockieren, potentiell ein Performancegewinn zu erwarten sein. Wie das in deinem konkreten Fall aussieht, kannst nur du feststellen.

Man sollte auch bedenken, daß beide Systeme unterschiedliche Features haben. So gibt es bei TMonitor den Timeout bei Enter, das TryEnter und die Wait/Pulse Semantik.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 10:10
Ja das denke ich eben auch. Da ich häufig nur lese, müsste der TMultiReadExclusiveWriteSynchronizer eine ganz gute Wahl sein.

Was ich sonst z.T. auch gerne mache:
Immutable Objects (als Interface) verwenden. Dann habe ich mit Lesen gar kein Problem und beim Schreiben wird einfach ein neues Objekt erzeugt. Dadurch braucht es überhaupt keine Sperrungen.
Das funktioniert aber hauptsächlich nur bei kleinen, einfachen Objekten. Ein TDictionary sollte ich dann doch mit einem TMultiReadExclusiveWriteSynchronizer absperren.
Andreas Blenk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 10:17
Dadurch braucht es überhaupt keine Sperrungen.
Das stimmt so nicht ganz.

Referenzzählung bei Strings, dyn. Arrays und Interfaces wird ebenfalls über atomare CPU-Befehle vorgenommen, damit das threadsave ist,
nur wird das halt direkt vom Compiler und der internen Verwaltung vom Delphi "heimlich" mit eingebaut und man muß sich um nix kümmern.


Zitat:
häufig nur lese
Natürlich bringt es nur einen Vorteil, wenn man nicht nur häufig, sondern auch häufig aus verschiedenen Thread liest undzwar gleichzeitig.
Oder wenn das Lesen länger dauert, dann wird auch weniges gleichzeitiges Lesen Vorteile bringen
$2B or not $2B

Geändert von himitsu (29. Sep 2016 um 10:19 Uhr)
  Mit Zitat antworten Zitat
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 10:22
Referenzzählung bei Strings, dyn. Arrays und Interfaces wird ebenfalls über atomare CPU-Befehle vorgenommen, damit das threadsave ist,
nur wird das halt direkt vom Compiler und der internen Verwaltung vom Delphi "heimlich" mit eingebaut und man muß sich um nix kümmern.
Also zumindest keine weiteren Sperrungen meinerseits.
Andreas Blenk
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 11:13
Das kommt darauf an wie oft gleichzeitig lesend zugegriffen wird. Wenn in der Regel ohnehin nur einer gleichzeitig liest oder schreibt, ist TMonitor tendenziell etwas schneller, weil der TMultiReadExclusiveWriteSynchronizer mehr Aufwand betreiben muss.

Wenn viele wirklich gleichzeitig lesen, wird dies aber mehr als ausgeglichen, da dabei mit TMonitor jeder Thread warten müsste. Der Vorteil ist hier im Vergleich sehr viel höher, so dass ich im Zweifel den TMultiReadExclusiveWriteSynchronizer benutzen würde, wenn die Chance besteht, dass der Fall häufig eintritt, dass genau gleichzeitig gelesen wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 11:38
Wenn viele wirklich gleichzeitig lesen, wird dies aber mehr als ausgeglichen, da dabei mit TMonitor jeder Thread warten müsste. Der Vorteil ist hier im Vergleich sehr viel höher, so dass ich im Zweifel den TMultiReadExclusiveWriteSynchronizer benutzen würde, wenn die Chance besteht, dass der Fall häufig eintritt, dass genau gleichzeitig gelesen wird.
Ok, danke! Dann bin ich da auf dem richtigen Weg. Da es auf dem Server läuft und viele Anfragen gleichzeitig kommen können/werden, wird es auch der Fall sein, dass häufig gleichzeitig gelesen wird.
Andreas Blenk
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 11:42
Ich kann im Detail hier nichts beitragen.

Aber ich habe gerade bei Video2Brain ein interessantes Tutorial zum Threading in .net gesehen: https://www.video2brain.com/de/video...reading-in-net

Da werden sehr detailliert die Feinheiten, Unterschiede und Fallstricke beschrieben (bis hin zu Problemen durch Prozessoroptimierungen (Stichwort "MemoryBarrier").

Ich habe das erst mal nur interessehalber durchgesehen und kann das im Detail nicht wiedergeben.

In Bezug auf ReaderWriterLocks war das Fazit, dass man testen soll, ob dieser Lock im speziellen Fall Performancevorteile bringt.

Vielleicht wäre das Video für den einen oder anderen ja ein paar Euro wert...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 12:21
Im Prinzip könnte man sich doch mal einen Wrapper schreiben, der Read/Write/ReadWrite-Locks als Funktionen bietet. (ReadWrite = Write)
Und dann kann man einfach, beim erstellen der LockInstanz das einbinden, was man brauch oder mal schnell ausprobieren will.
Vom Code her ist es ja egal, ob der Code sagt "IchWillnenReadLock" und dann die jeweilige Implementation dann alles gleich lockt, wie z.B. bei der CriticalSection.

Nur der Entwickler muß halt beim Schreiben eben immer angeben, ob er lesend, schreiben oder lesend+schreiben zugreift, egal, ob es dann ausgewertet wird, aber für die Codedokumentation wäre es zumindestens ein Vorteil.
$2B or not $2B
  Mit Zitat antworten Zitat
DrTight

Registriert seit: 17. Okt 2014
8 Beiträge
 
#10

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 30. Sep 2016, 09:13
Ich verweise mal auf einem anderen Thread wo TMonitor vs TCriticalSection getetstet wurden.
https://www.delphitools.info/2013/06...iticalsection/
  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 22:34 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