Was ist der Unterschied zwischen Semaphor und Thread-Pool?


Antwort 1:

Es sind zwei völlig unterschiedliche Konzepte. Semaphor ist ein Signalisierungs- / Synchronisationsmechanismus. Es wird verwendet, um zwischen Prozessen zu kommunizieren. Es kann auch verwendet werden, um den Zugriff auf gemeinsam genutzte Ressourcen zu steuern.

Thread Pool ist ein Designkonzept. Ein Thread verbraucht je nach Implementierung erhebliche Ressourcen. Wenn es also ein Szenario gibt, in dem viele Anfragen eingehen und parallel bearbeitet werden können; Die Behandlung mithilfe eines Thread-Pools kann zu einer Leistungssteigerung führen. Das Erstellen und Zerstören von Threads kann zu erheblichem Overhead führen. So kann ein Pool von Threads erstellt werden, in dem immer eine feste Anzahl von Threads bereit ist, um die Anforderungen abzuschließen.

Dieser Thread-Pool kann auch dynamisch skaliert werden.

Zusammenfassend möchte ich wiederholen, dass es keine Verbindung oder Abhängigkeit zwischen Semaphor und Thread-Pool gibt.


Antwort 2:

Die vorherigen Antworten sind alle richtig. Ich möchte nur hinzufügen, dass Semaphoren verwendet werden können, um auch die Anzahl der Threads zu begrenzen. Ein Semaphor wird verwendet, um Ressourcen zu begrenzen, und diese Ressource kann die Anzahl der Threads sein. Der Unterschied besteht darin, dass die Verwendung eines Semaphors auf diese Weise die Anzahl der aktiv ausgeführten Threads und nicht die Anzahl der erstellten Threads begrenzt. Angenommen, Sie verwenden 10 Threads, um 1000 Jobs zu verarbeiten. Thread 1 wird zuerst beendet und zerstört. Anschließend kann ein neuer Thread für Job 11 erstellt werden. Es werden immer nur 10 Threads ausgeführt, aber am Ende werden insgesamt 1000 Threads erstellt und zerstört. Der Thread-Pool hingegen erstellt nur 10 Threads. Wenn Thread 1 fertig ist, wird er nicht zerstört, sondern verarbeitet den nächsten Job weiter. Das Erstellen und Zerstören von Threads nimmt viel Zeit in Anspruch, daher ist der Thread-Pool offensichtlich die empfohlene Methode, um mit solchen Situationen umzugehen


Antwort 3:

Semaphor: Es wird hauptsächlich als Sperre verwendet, um einen kritischen Abschnitt zu schützen (Codeabschnitt, der zum Race-Zustand führt). Hier darf nur ein Thread Semaphor aufnehmen, während er einen kritischen Abschnitt betritt, und alle anderen Threads, die versuchen, einen kritischen Abschnitt zu betreten, werden blockiert Wenn dieser Thread den kritischen Abschnitt verlässt, wird die Sperre aufgehoben, sodass diese Sperre von dem blockierten Thread verwendet werden kann. Auf diese Weise wird sichergestellt, dass kein anderer Thread sie ausführen kann, sobald ein einzelner Thread sie ausführt Der erste Thread hat den kritischen Abschnitt verlassen.

Semaphor wird auch verwendet, um Signale zwischen Threads zu senden, um verpasste Signale zu vermeiden.

ThreadPool:

Thread-Pools werden verwendet, wenn Sie die Anzahl der in Ihrer Anwendung ausgeführten Threads begrenzen müssen, während mit dem Starten eines neuen Threads ein Leistungsaufwand verbunden ist. Statt also für jede Aufgabe einen neuen Thread zu starten, muss die Aufgabe gleichzeitig ausgeführt werden kann an einen Thread-Pool übergeben werden. Sobald der Pool Leerlauf-Threads hat, wird die Aufgabe einem von ihnen zugewiesen und ausgeführt. Intern werden die Aufgaben in eine Blockierungswarteschlange eingefügt, aus der die Threads im Pool aus der Warteschlange entfernt werden. Wenn eine neue Aufgabe in die Warteschlange eingefügt wird, wird sie von einem der inaktiven Threads erfolgreich aus der Warteschlange entfernt und ausgeführt. Der Rest der inaktiven Threads im Pool wird blockiert und wartet darauf, Aufgaben aus der Warteschlange zu entfernen.

Thread-Pools werden häufig in Servern mit mehreren Threads verwendet. Jede Verbindung, die über das Netzwerk am Server ankommt, wird als Task verpackt und an einen Thread-Pool weitergeleitet. Die Threads im Thread-Pool verarbeiten die Anforderungen für die Verbindungen gleichzeitig.

Das sind also im Grunde zwei verschiedene Konzepte

"Java Concurrency in Practice" ist eines der besten Bücher, um die Konzepte des Multithreading zu verstehen !!