![]() |
Multithreading zugriff auf eine THashedStringlist in einem SLB
Hintergrund:
Also ich schreibe einen SLB der Folgendes leistens wird: Der SLB vermittelt zwischen einem Webserver (der nur HTML Rendert) und mehreren Instanzen eines Applikationsserver die auf dem selben Rechner laufen. Es wird ein Socket vermittelt. d.h. jede Instanz läuft mit einem anderen Port und später ist das ganze auch auf mehrere Rechner skalierbar. Dieser SLB verwaltet also eine liste mit Statistischen Daten über Applikationsserver, wie z.B. deren momentan gequeute Jobs oder einen "Lastwert" . Problem: Wenn ich auf diese Liste zugreife und z.B. den Server mit der geringsten last gefunden habe, kann es sein das ein anderer Thread im SLB diesen auch findet und ihn auslastet bevor ich diese Liste aktualisieren kann. Ist das richtig ? Muss deswegen alles in einer Criticalsection passieren?
Delphi-Quellcode:
Bremst das nicht definitiv den Server aus , wenn quasi 90% des Codes in einer Crtitcalsection ausgeführt werden?
job:=DecodeRequest(sRequest);
CS.Enter; ServerDaten := getServer(job); //ServerDaten ist ein Element einer global gehaltenen Liste. ServerDaten.Jobs.add(job.ID,job.timeout); ServerDaten.lastwert := getLW(ServerDaten.Jobs); sRespons := EncodeResponse(ServerDaten.Socket); CS.Leave; Einen anderen Weg gibt es wohl nicht, oder? |
AW: Multithreading zugriff auf eine THashedStringlist in einem SLB
Generell solltest du den Zugriff auf deine Liste definitiv durch CriticalSections absichern. Du müsstest halt schauen, wie du deinen Server designst, sodass wirklich nur ein Minimum an Code in der CriticalSection liegt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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 by Thomas Breitkreuz