Ich möchte lieber, dass dies ein Kommentar ist, aber es werden zu viele Zeichen benötigt. Wie auch immer, Ozgur, nach den Fragen in Ihren Kommentarantworten zu urteilen, scheint Ihnen der Punkt zu fehlen, dass Sie nicht einfach sagen können, dass mein Thread so lange dauert, und erwarten, dass er dank des Betriebssystems auf magische Weise in Verbindung mit anderen Threads funktioniert. Sie müssen Ihre Threads entwerfen und auf die Leistung im ungünstigsten Fall analysieren. Wenn der Worst-Case Ihren Anforderungen nicht entspricht, müssen Sie Ihre Threads neu gestalten.
Anstatt einfach zu sagen, dass Thread 1 10 ms dauert und Thread 2 20 ms dauert, müssen Sie auch sagen, dass Thread 1 alle 15 ms ausgeführt werden muss. Thread 2 muss alle 40 ms ausgeführt werden. Thread 3 muss alle 500 ms ausgeführt werden, Thread N muss alle 1500 ms ausgeführt werden. Anschließend legen Sie fest, wie lange es dauern kann, bis jeder Thread im schlimmsten Fall abgeschlossen ist. Sie setzen all das zusammen, identifizieren die schlimmsten Szenarien und müssen dann sicherstellen, dass jeder Thread seine Timing-Anforderungen erfüllt. In dieser Analyse können Sie auch feststellen, ob einige Threads eine höhere Priorität als andere haben müssen, um ihre Timing-Anforderungen zu erfüllen.
Zum Beispiel wird Thread5 ausgeführt und von Thread 4 unterbrochen, der von Thread 3 unterbrochen wird, der von ThreadN unterbrochen wird. Dies könnte ein Worst-Case-Szenario sein. Sie stellen dies alles auf eine Zeitachse und stellen sicher, dass auch in diesem schlimmsten Fall jeder Thread seine Zeitanforderungen erfüllt. Sie können sicherstellen, dass die Threads dieses Worst-Case-Szenario deterministisch abschließen, indem Sie den Scheduler und die Prioritäten in einem Echtzeitbetriebssystem verwenden. Dieser Determinismus macht ein Echtzeit-Betriebssystem aus.
Wenn Sie Threads die gleiche Priorität geben, haben Sie einen Teil (wenn nicht alle) dieses Determinismus verloren, da der Scheduler möglicherweise frei wählen kann, welchen Thread er als Nächstes ausführen möchte.
In einem Betriebssystem wie Windows können Sie nicht nur nicht angeben, wann jeder Thread ausgeführt wird, sondern auch nicht garantieren, dass Ihre Anwendung zu einem beliebigen Zeitpunkt ausgeführt wird. Das Betriebssystem kann Ihre Anwendung anhalten und jederzeit einen Hintergrunddienst ausführen. Mit anderen Worten, es gibt keinen Determinismus. Daher ist Windows kein Echtzeitbetriebssystem. Wenn Ihre Timing-Anforderungen jedoch hoch sind (Thread1 wird alle 10 Sekunden ausgeführt, Thread2 wird alle 15 Sekunden ausgeführt), können Sie Windows im Wesentlichen wie ein Echtzeitbetriebssystem behandeln, solange Sie den Slop berücksichtigen und ungefähr alle 10 oder 15 Sekunden (Geben oder Nehmen Sie ein paar hundert Millisekunden und ein gelegentlich fehlendes Fenster) ist gut genug.