Heim >häufiges Problem >Threads auf Kernelebene werden schneller ausgeführt

Threads auf Kernelebene werden schneller ausgeführt

(*-*)浩
(*-*)浩Original
2019-12-25 14:47:233746Durchsuche

Threads auf Kernelebene werden schneller ausgeführt

Thread auf Kernelebene: Der Wechsel wird vom Kernel gesteuert. Wenn der Thread wechselt, wird er vom Benutzermodus in den Kernelmodus konvertiert. Nach dem Wechsel müssen Sie vom Kernel-Modus in den Benutzermodus zurückkehren. Sie können SMP gut nutzen, dh eine Multi-Core-CPU verwenden. So sehen Windows-Threads aus. (Empfohlenes Lernen: phpstorm)

Der Thread-Kernelwechsel auf Benutzerebene wird vom Benutzermodusprogramm selbst gesteuert, ohne dass der Kernel eingreift, und der Verbrauch für das Eintreten und Verlassen des Kernelstatus beträgt reduziert, aber es ist nicht sehr gut. Die Verwendung einer Multi-Core-CPU ist im Allgemeinen die Art und Weise, wie Linux-Pthread derzeit verwendet wird.

Die Implementierung von Threads kann in zwei Kategorien unterteilt werden: Thread auf Benutzerebene und Thread auf Kernelebene. Letzterer wird auch als Kernel-unterstützter Thread oder Lightweight-Prozess bezeichnet. In Multithread-Betriebssystemen sind die Implementierungsmethoden jedes Systems unterschiedlich. In einigen Systemen werden Threads auf Benutzerebene und in einigen Systemen Threads auf Kernelebene implementiert.

Benutzer-Thread bezieht sich auf einen Thread, der in einem Benutzerprogramm ohne Kernel-Unterstützung implementiert ist. Er ist nicht vom Betriebssystemkern abhängig. Der Anwendungsprozess verwendet die Thread-Bibliothek, um die Erstellung, Synchronisierung und Bereitstellung zu ermöglichen. Planung und Verwaltung von Threads zur Steuerung des Benutzer-Threads.

Es ist kein Wechsel zwischen Benutzermodus und Kernelmodus erforderlich, es ist schnell und der Betriebssystemkernel kennt die Existenz von Multithreads nicht, sodass das Blockieren eines Threads den gesamten Prozess (einschließlich aller seiner Threads) blockiert. . Da die Prozessorzeitscheibenzuteilung hier auf dem Prozess basiert, wird die Ausführungszeit jedes Threads relativ verkürzt.

Kernel-Threads: Vom Betriebssystemkernel erstellt und zerstört. Der Kernel verwaltet Prozess- und Thread-Kontextinformationen sowie den Thread-Wechsel. Wenn ein Kernel-Thread aufgrund von E/A-Vorgängen blockiert wird, hat dies keinen Einfluss auf den Betrieb anderer Threads. Windows NT und 2000/XP unterstützen Kernel-Threads.

Benutzer-Threads laufen auf einem Zwischensystem. Derzeit gibt es zwei Möglichkeiten, Zwischensysteme zu implementieren, nämlich das Laufzeitsystem und den Kernel-Steuerungsthread.

Das „Laufzeitsystem“ ist im Wesentlichen eine Sammlung von Funktionen zur Verwaltung und Steuerung von Threads, einschließlich Erstellungs-, Abbruch-, Thread-Synchronisierungs- und Kommunikationsfunktionen sowie Planungsfunktionen. Diese Funktionen befinden sich im Benutzerbereich und dienen als Schnittstelle zwischen Benutzer-Threads und dem Kernel.

Benutzer-Threads können keine Systemaufrufe verwenden. Wenn der Thread stattdessen Systemressourcen benötigt, sendet er die Anfrage an die Laufzeit, und diese erhält Systemressourcen über die entsprechenden Systemaufrufe.

Kernel-Steuerungsthread: Das System weist dem Prozess mehrere Lightweight-Prozesse (LWP) zu, die vom Kernel bereitgestellte Dienste über Systemaufrufe abrufen können, und Benutzer-Threads im Prozess können durch Multiplexen mit LWP verknüpft werden um die Dienste des Kernels zu erhalten.

Im Folgenden sind die Unterschiede zwischen Threads auf Benutzerebene und Threads auf Kernelebene aufgeführt:

(1) Kernel-unterstützte Threads sind Betriebssystem-Kernel-bewusst, während Threads auf Benutzerebene Threads sind Betriebssystem-Kernel-bewusst und unempfindlich.

(2) Das Erstellen, Abbrechen und Planen von Threads auf Benutzerebene erfordert keine Unterstützung des Betriebssystemkernels und wird auf Sprachebene (z. B. Java) gehandhabt, während das Erstellen, Abbrechen und Planen von Kernel-unterstützte Threads erfordern Unterstützung durch den Betriebssystemkernel und sind weitgehend identisch mit der Prozesserstellung, -zerstörung und -planung.

(3) Wenn ein Thread auf Benutzerebene eine Systemaufrufanweisung ausführt, wird der Prozess, zu dem er gehört, unterbrochen, während ein Kernel-Support-Thread eine Systemaufrufanweisung ausführt der Thread, der unterbrochen werden soll.

(4) In einem System mit nur Threads auf Benutzerebene basiert die CPU-Planung immer noch auf dem Prozess. Mehrere Threads in einem laufenden Prozess werden vom Benutzerprogramm so gesteuert, dass sie rotierend ausgeführt werden, sofern Kernel-Unterstützung vorhanden ist In einem Thread-System basiert die CPU-Planung auf Threads, und der Thread-Scheduler des Betriebssystems ist für die Thread-Planung verantwortlich.

(5) Die Programmentität von Threads auf Benutzerebene ist ein Programm, das im Benutzermodus ausgeführt wird, während die Programmentität von Kernel-unterstützten Threads ein Programm ist, das in jedem Zustand ausgeführt werden kann.

Das obige ist der detaillierte Inhalt vonThreads auf Kernelebene werden schneller ausgeführt. 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