Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Welche Vorgänge können in der Linux-Umgebung zu einem Thread-Wechsel führen?

Welche Vorgänge können in der Linux-Umgebung zu einem Thread-Wechsel führen?

(*-*)浩
(*-*)浩Original
2019-12-19 09:20:033654Durchsuche

Welche Vorgänge können in der Linux-Umgebung zu einem Thread-Wechsel führen?

Linux verwendet ein Eins-zu-Eins-Thread-Modell, und der Unterschied zwischen Benutzer-Thread-Wechsel und Kernel-Thread-Wechsel ist sehr gering. Wenn Sie gleichzeitig den Overhead ignorieren, der dadurch entsteht, dass der Benutzer freiwillig die Ausführungsrechte (Ertrag) des Benutzer-Threads aufgibt, müssen Sie nur den Overhead des Kernel-Thread-Wechsels berücksichtigen. (Empfohlenes Lernen: Linux-Tutorial )

Beachten Sie, dass dies nur der Vereinfachung des Verständnisses dient. Tatsächlich leistet die Benutzer-Thread-Bibliothek viel Arbeit bei der Planung und Synchronisierung von Benutzer-Threads, und diese Kosten können nicht ignoriert werden.

Wie die JVM Thread#yield() erklärt: Wenn das zugrunde liegende Betriebssystem die Semantik von yield nicht unterstützt, lässt die JVM den Benutzer-Thread bis zum Ende der Zeitscheibe laufen und der Thread bleibt passiv umgeschaltet, um einen ähnlichen Effekt zu erzielen.

Was verursacht Thread-Wechsel

Zeitscheibenrotation

Thread-Blockierung

Thread gibt Zeitscheibe aktiv auf

Direkter Overhead

Direkter Overhead wird durch den Threadwechsel selbst verursacht, der unvermeidlich und unvermeidlich ist.

Umschalten zwischen Benutzermodus und Kernelmodus

Der Threadwechsel kann nur im Kernelmodus abgeschlossen werden. Wenn sich der aktuelle Benutzer im Benutzermodus befindet, führt dies unweigerlich zu einem Konflikt zwischen Benutzermodus und Kernelmodus wechseln. (Wie hoch sind die spezifischen Kosten für den „Wechsel zwischen Benutzermodus und Kernelmodus“???)

Kontextwechsel

Wie bereits erwähnt, müssen Thread-Informationen (oder Prozessinformationen, wie auch immer Sie es nennen) in einer task_struct gespeichert werden. Beim Wechseln von Threads ist es erforderlich, die task_struct des alten Threads aus dem Kernel herauszuschneiden und einzubinden den neuen Thread, was einen Kontextwechsel bewirkt. Darüber hinaus ist es auch erforderlich, Register, Programmzähler, Thread-Stapel (einschließlich Operationsstapel, Datenstapel) usw. zu wechseln.

Thread-Planungsalgorithmus

Der Thread-Planungsalgorithmus muss den Status von Threads, Wartebedingungen usw. verwalten. Wenn er nach Priorität geplant wird, muss er auch beibehalten werden eine Prioritätswarteschlange. Wenn der Thread häufig gewechselt wird, sind diese Kosten nicht zu unterschätzen.

Indirekter Overhead

Indirekter Overhead ist ein Nebeneffekt des direkten Overheads und hängt von der Systemimplementierung und der Implementierung des Benutzercodes ab.

Cache fehlt

Wechselprozess, neue Logik muss ausgeführt werden. Wenn die Adressräume, auf die die beiden zugreifen, nicht ähnlich sind, kommt es zu Cache-Fehlern. Die spezifischen Auswirkungen hängen von der Systemimplementierung und der Benutzercodeimplementierung ab. Wenn der Cache des Systems größer ist, können die Auswirkungen von Cache-Fehlern verringert werden. Wenn die Adressräume, in denen Benutzer-Threads auf Daten zugreifen, nahe beieinander liegen, ist auch die Cache-Fehlerrate selbst relativ niedrig.

Das obige ist der detaillierte Inhalt vonWelche Vorgänge können in der Linux-Umgebung zu einem Thread-Wechsel führen?. 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