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, 08: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.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 08: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, 09: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.373 Beiträge
 
Delphi 12 Athens
 
#4

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 09: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
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Sep 2016 um 09: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, 09: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.960 Beiträge
 
Delphi 12 Athens
 
#6

AW: TMonitor vs. TMultiReadExclusiveWriteSynchronizer

  Alt 29. Sep 2016, 10: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
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 07:33 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