![]() |
Event - Latenz
Hallo,
Ich bin gerade über eine Sache gestolpert, die ich nicht so ganz nachvollziehen kann: - Ich habe einen Thread mit Priorität tpNormal. Da ist ein waitForSingleObject(Event, ... ) drin. - In meiner Anwendung setzte ich den Event ('Stinknormaler' Autoreste Event (aus der windows unit und nicht aus den syncObjs) - Es dauert bis zu 20ms, bis der 'Event' ankommt, d.h. das waitFor 'durchschaltet' - Der Thread braucht ca. 1 ms für einen Durchlauf - Die Events kommen etwas im 10ms Raster, d.h. ab un zu wird ein Event 'verschlafen', was alles durcheinander bring :-( Ist das normal, übersehe ich was oder gibt es eine schnellere Möglichkeit der 'Threadalarmierung' ? Freue mich über jede Idee Tomy |
AW: Event - Latenz
Schau dir mal
![]() |
AW: Event - Latenz
Interessanter Gedanke, aber die Timerauflösung steht schon auf 1ms ....
|
AW: Event - Latenz
* Windows ist kein RealTime-System
* du redest hier von 2 Threads, aber es gibt hunderte tausende Threads, welche sich eine homöopathische Dosis an CPU-Kernen teilen, wo jeder Thread "standardmäßig" ein paar Millisekunden abeitet und dann Pause macht Es liegt in der Sache der Natur, dass der andere Thread somit ein bisschen braucht, bis er reagieren kann. Zitat:
|
AW: Event - Latenz
Zitat:
Bei einer Server-SKU soll so ein Quantum wohl relativ konstant bei 120ms liegen. Unixe/Linuxe schedulen wohl auch um die 100ms. Das ganze sind ungefähre Angaben. Der Quellcode des Windows-Schedulers liegt nicht offen und Microsoft schweigt sich zu den exakten Zeiten aus. Zitat:
Wenn alle 10ms ein Event rein kommt, und das 1ms braucht zum abarbeiten, dann hat man 9ms nix zu tun. Die kann man natürlich mit Kommunikation zwischen den Threads füllen, effizient ist das aber nicht :) |
AW: Event - Latenz
Und dann kommt es auch drauf an, ob der andere Thread zufällig grade aktiv ist, bzw. kurz danach wird, oder ob er grade aktiv war und nun 'ne Weile weg ist.
Sleep und WaitFor sind aber nett und geben sofort die Ausführung an Windows zurück ... verbrauchen also nicht den komplett ihnen zustehende Slott, wodurch die anderen Threads somit schneller wieder dran kommen. Da die meisten Threads meistens schlafen, muß somit kein Thread wirklich sehr lange warten, bis er wieder dran ist. Soll ein Thread eine gewisse "schnelle" Aufgabe in einem Slott durchführen, dann könnte man kurz vorher ein Sleep(0) einfügen und danach arbeitet der Code von beginn des neuen Slotts, aber garantiert ist es "normal" dennoch nicht, dass es wirklich durcharbeitet, außer man fummelt noch bissl an der Priorität ud Co. rum, aber auch da ist nichts garantiert. z.B. könnte man alle anderen Threads/Prozesse auf die anderen Kerne beschränken und den einen Thread alleinig an einen bestimmteh Kern binden ... grundsärzlich würde er dann durchlaufen (aber durch Treiber, Interrupts usw. könnte er dennoch unterbrochen werden). Außerdem hat es die CPU/Windows nicht gern, wenn EIN Core brennt (durchackert), drum schubst z.B. Windows 11 vor allem die arbeitenden Threads alle 30 Sekunden zwischen den Cores hin und her, um die Wärmebelastung zu verteilen. |
AW: Event - Latenz
Über windows und realtime kann man geteilter Meinung sein, was natürlich an der Definition von realtime hängt. So zeigt zum Beispiel
![]() Warum ein Thread, ganz einfach, weil das SDK folgendes sagt: Zitat:
|
AW: Event - Latenz
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 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