Thread-Pooling in C 11
Herausforderung:
Das Erstellen und Verwalten von Threads kann teuer sein, insbesondere wenn für jede Aufgabe wiederholt. Wie können wir einen Thread-Pool erstellen, der es uns ermöglicht, mehrere Aufgaben an einen Thread-Pool zu senden und dabei den Aufwand für die Thread-Erstellung zu vermeiden?
Antwort:
Implementieren eines Threads Pool in C 11 beinhaltet das Erstellen einer Klasse, die eine Sammlung von Threads verwaltet, die zum Ausführen von Aufgaben wiederverwendet werden können. Hier ist eine Aufschlüsselung der wichtigsten Aspekte:
Implementierung der ThreadPool-Klasse:
Die ThreadPool-Klasse definiert die Schnittstelle zum Erstellen, Verwalten und Stoppen eines Thread-Pools.
1. ThreadPool::Start:
Initialisiert den Thread-Pool durch Erstellen der angegebenen Anzahl von Threads. Diese Threads führen eine Endlosschleife aus und warten auf Aufgaben.
2. ThreadPool::ThreadLoop:
Die Endlosschleife, die jeder Thread im Pool ausführt. Es sucht kontinuierlich nach neuen Aufgaben, führt sie aus und wiederholt sie, bis die Beendigung signalisiert wird.
3. ThreadPool::QueueJob:
Fügt eine Aufgabe zur Thread-Pool-Warteschlange hinzu. Die Aufgabe ist ein Funktionsobjekt, das die zu erledigende Arbeit definiert.
4. ThreadPool::busy:
Überprüft, ob der Thread-Pool ausstehende Aufgaben hat.
5. ThreadPool::Stop:
Beendet den Thread-Pool und wartet darauf, dass alle Threads ihre aktuellen Aufgaben beenden.
Integration des ThreadPools:
Sobald der Wenn die ThreadPool-Klasse definiert ist, können Sie sie als verwenden folgt:
thread_pool->QueueJob([] { /* ... */ });
Beispiel:
std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += 2; } int main() { // ThreadPool Example ThreadPool thread_pool; thread_pool.Start(); for (int i = 0; i < 8; ++i) { for (int j = 0; j < 4; ++j) { thread_pool.QueueJob(std::bind(each_thread_does, j)); } } // Wait for the thread pool to complete while (thread_pool.busy()) {} thread_pool.Stop(); arr[4] = std::min_element(arr, arr + 4); return 0; }
Dieses Beispiel zeigt, wie man mit der bereitgestellten Klasse einen Thread-Pool erstellt und mehrere Aufgaben ohne das an den Pool sendet Notwendigkeit der wiederholten Erstellung und Löschung von Threads.
Das obige ist der detaillierte Inhalt vonWie können C 11-Thread-Pools die Aufgabenverwaltung verbessern und den Overhead reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!