Wenn Sie renice
ein Linux-Programm verwenden, wird Ihre CPU nicht verbrannt, aber es wird nicht unbedingt das tun, was Sie möchten.
Prioritäten haben nichts damit zu tun, wie schnell eine CPU Code ausführt. Es führt Code aus Programmen mit unterschiedlichen Prioritätsstufen gleich schnell aus. Welche Prioritäten sich ändern, ist, welches Programm das Betriebssystem auswählt, wenn es eine Auswahl hat. CPUs können jeweils nur einen "Thread" der Ausführung ausführen (technisch gesehen 1 pro Kern für Mehrkern-CPUs). Wenn es mehr als das tun muss, setzt es auf Multitasking - es wechselt zwischen der Ausführung verschiedener Programme hin und her, um die Illusion zu erzeugen, mehr Threads auszuführen als CPUs. Bei der Auswahl, wie viel Zeit für jede dieser Aufgaben zur Verfügung steht, wird die Priorität als Hinweis verwendet.
Was "Echtzeit" für einen Computer bedeutet, ist weniger "so schnell laufen" als vielmehr "diesen Prozess nicht verhindern". Echtzeitprogrammierung ist in vielen Bereichen sehr wichtig. Zum Beispiel, wenn ich Software schreibe , die in einem Autoantiblockiersystem verwaltet, ich wirklich nicht will , dass meine Aufgabe ein paar Millisekunden spät laufen , weil das Betriebssystem entschied er eine Diagnose auf den Scheibenwischer läuft benötigt. Dementsprechend wird die Antiblockiersystem-Verwaltungssoftware in Autos mit einer "Echtzeit" -Priorität ausgeführt.
Um ehrlich zu sein, ist unter Linux die Prioritätsstufe "Echtzeit" eine Fehlbezeichnung. Dies liegt daran, wie Linux seine Prozesse plant. Wenn in Windows ein Prozess mit einer höheren Priorität ausgeführt wird, wird den Prozessen mit einer niedrigeren Priorität keine CPU-Zeit zugewiesen, es sei denn, die Aufgabe mit der höheren Priorität wartet auf etwas - überhaupt keine. Es dürfen nur Kernelprozesse über eine "Echtzeit" -Fensteraufgabe ausgeführt werden. Windows verfügt über eine Tonne bloatware im Hintergrund jederzeit ausgeführt wird , so die Priorität Anhebung auf „Realtime“ verhindert alle diesen Müll vom Laufen.
Es gibt jedoch ein Problem damit. Manchmal hängt Ihre Aufgabe mit höherer Priorität von einer dieser Aufgaben mit niedrigerer Priorität ab. Dies wird als "Prioritätsinversion" bezeichnet und ist ein großes Thema in der Welt der Multithread-Programmierung. In diesem Fall kann die Aufgabe mit der höheren Priorität die Aufgabe mit der niedrigeren Priorität aushungern lassen, ohne zu bemerken, dass sie sich selbst stoppt! Unter Linux geschieht dies nicht, da unter Linux die Prioritäten als eine Möglichkeit angesehen werden, zu bestimmen, welcher Teil der CPU jedem Programm zugewiesen wird, und nicht als Alles-oder-Nichts-Ansatz. Ein Prozess, der mit -20 ausgeführt wird, erhält wesentlich mehr CPU-Zeit als ein Prozess, der mit 0 ausgeführt wird, aber selbst wenn ein -20-Programm vorhanden ist, erhält das 0-Programm einigeCPU-Zeit. Wenn Speicher zur Verfügung steht, gibt der aktuelle Linux-Scheduler ein Programm mit -1 doppelt so viel CPU-Leistung wie eine 0 und ein Programm mit -2 doppelt so viel wie -1 und so weiter. Dies bedeutet , dass 0.9999046% Ihrer CPU - Zeit wird in das Programm gehen , die bei -20 ist, aber einige kleine Fraktion wird auf 0 Das Programm bei 0 , um das Programm gehen fühlen , wie es auf einem 200 kHz - Prozessor läuft!
Wenn Sie jemals echte Echtzeit wollen , bei der Sie verhindern können, dass Sie von etwas anderem behindert werden, müssen Sie einen Kerneltreiber schreiben oder eine Echtzeiterweiterung für Linux verwenden. Redhat hat eine namens MRG, die eine echte Echtzeitverarbeitung unter Linux ermöglicht. In diesem Fall bedeutet "Echtzeit" etwas Besonderes. Unter MRG dürfen Benutzer in der Gruppe "Echtzeit" diese Echtzeiterweiterungen verwenden (was den Prozessor für immer beschäftigen könnte, da sie absichtlich nicht den netten, freundlichen Linux-Scheduler verwenden).