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:
Was verursacht Thread-Wechsel
ZeitscheibenrotationThread-BlockierungThread gibt Zeitscheibe aktiv aufDirekter 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!