Heim >Java >JavaBase >Welche Funktion hat thread.sleep?

Welche Funktion hat thread.sleep?

hzc
hzcOriginal
2020-06-15 11:52:407953Durchsuche

Welche Funktion hat thread.sleep?Welche Rolle spielt thread.sleep:

(1) CPU-Wettbewerbsstrategie

In Betriebssystemen gibt es viele Strategien für den CPU-Wettbewerb , Unix Das System verwendet einen Zeitscheibenalgorithmus, während Windows einen Präventivalgorithmus verwendet.

(1).

Im Zeitscheibenalgorithmus werden alle Prozesse in einer Warteschlange eingereiht. Das Betriebssystem weist jedem Prozess in seiner Reihenfolge eine Zeitspanne zu, d. h. die Zeit, die der Prozess ausführen darf. Wenn der Prozess am Ende der Zeitscheibe noch läuft, wird die CPU weggenommen und einem anderen Prozess zugewiesen. Wenn der Prozess blockiert oder vor dem Ende der Zeitscheibe endet, schaltet die CPU sofort um. Der Scheduler muss lediglich eine Liste bereiter Prozesse verwalten. Wenn ein Prozess seine Zeitscheibe verbraucht, wird er an das Ende der Warteschlange verschoben.

(2).

Ein präventives Betriebssystem bedeutet, dass ein Prozess, wenn er CPU-Zeit erhält, die CPU vollständig belegt, es sei denn, er gibt die Nutzung der CPU auf. Daher ist ersichtlich, dass das Betriebssystem in einem präventiven Betriebssystem davon ausgeht, dass alle Prozesse einen „guten Charakter“ haben, und die CPU aktiv verlässt. In einem präventiven Betriebssystem berechnet das Betriebssystem unter der Annahme, dass es mehrere Prozesse gibt, eine Gesamtpriorität für diese basierend auf ihren Prioritäten und der Hungerzeit (wie lange es die CPU nicht verwendet hat). Das Betriebssystem weist die CPU dem Prozess mit der höchsten Gesamtpriorität zu. Wenn der Prozess die Ausführung abschließt oder aktiv hängt, berechnet das Betriebssystem die Gesamtpriorität aller Prozesse neu und wählt dann den Prozess mit der höchsten Priorität aus, um ihm die Kontrolle über die CPU zu geben.

(2) Aus dem oben Gesagten kann geschlossen werden, dass die Funktion von Thread.Sleep() darin besteht, dem Betriebssystem mitzuteilen, dass ich in den nächsten Millisekunden nicht am CPU-Wettbewerb teilnehmen werde >

Dann gibt es zwei Fragen: Welche Funktion hat

(1).Thread.Sleep(0)?

Die Funktion von Thread.Sleep(0) besteht darin, „

das Betriebssystem auszulösen, um den CPU-Wettbewerb sofort neu zu starten “. Das Ergebnis des Wettbewerbs kann sein, dass der aktuelle Thread weiterhin die CPU-Steuerung erhält oder durch einen anderen Thread ersetzt wird, um die CPU-Steuerung zu erhalten. Aus diesem Grund schreiben wir Thread.Sleep(0) oft in großen Schleifen, da dies anderen Threads wie dem Paint-Thread die Möglichkeit gibt, die CPU-Steuerung zu erlangen, sodass die Schnittstelle dort nicht einfriert.

(2). Angenommen, Thread.Sleep(1000) wird jetzt aufgerufen. Wird dieser Thread dann definitiv nach 1 Sekunde aktiviert?

Die Antwort lautet: nicht unbedingt. Denn man sagt dem Betriebssystem einfach: Ich möchte in den nächsten 1000 Millisekunden nicht am CPU-Wettbewerb teilnehmen. Nach Ablauf von 1000 Millisekunden verwendet möglicherweise zu diesem Zeitpunkt ein anderer Thread die CPU, sodass das Betriebssystem die CPU nicht neu zuweist, bis dieser Thread hängt oder endet, selbst wenn das Betriebssystem zufällig an der Reihe ist, die CPU zuzuweisen Diesmal ist der aktuelle Thread nicht unbedingt der mit der höchsten Gesamtpriorität, und die CPU wird möglicherweise immer noch von anderen Threads vorbelegt.

Empfohlenes Tutorial: „

Java-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Funktion hat thread.sleep?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was kann Java?Nächster Artikel:Was kann Java?