2017-10-05 2 views

Antwort

0

Benutzermodus-Threads werden im Benutzermodus von etwas im Prozess geplant, und der Prozess selbst ist die einzige Sache, die vom Kernel-Scheduler gehandhabt wird.

Das bedeutet, dass Ihr Prozess eine bestimmte Menge an Grunzen von der CPU bekommt und Sie diese unter all Ihren Benutzermodus-Threads teilen müssen.

Einfacher Fall, Sie haben zwei Prozesse, einen mit einem einzelnen Thread und einen mit hundert Threads.

Mit einer vereinfachten Kernel-Scheduling-Richtlinie erhält der Thread im Single-Thread-Prozess 50% der CPU und jeder Thread im Hundert-Thread-Prozess jeweils 0,5%.

Mit Kernelmodus-Threads verwaltet der Kernel selbst Ihre Threads und plant sie unabhängig voneinander. Mit dem gleichen vereinfachten Scheduler würde jeder Thread nur eine Berührung unter 1% des CPU-Grunts bekommen (101 Threads, um die 100% der CPU zu teilen).

0

Ein Problem mit Thread auf Benutzerebene ist: wenn ein Thread blockiert, blockiert der gesamte Prozess. Auch wenn die anderen Threads laufen könnten und nicht verwandt sind mit dem blockierten. Für das Betriebssystem ist das Threading nicht bekannt, sodass der gesamte Prozess blockiert wird.

+0

Können Sie mir einige Beispiele geben, wenn ein Thread blockiert? –

+1

@ You'reawesome, Thread Warten auf I/O ist ein Beispiel. Thread, der auf die Freigabe eines Semaphors wartet, ist ein anderer. –

Verwandte Themen