2013-05-21 3 views
19

Ich versuche die verschiedenen Anwendungsfälle zu verstehen. und der Unterschied zwischen den 2 Threads verwendet. This ist ein tolles Tutorial, das ich gelesen habe, das boost::thread_group erklärt.boost :: threadpool :: pool vs.boost :: thread_group

und hier ist ein Code, den ich mit:

boost::threadpool::pool s_ThreadPool(GetCoreCount()); 

CFilterTask task(pFilter, // filter to run 
    boost::bind(&CFilterManagerThread::OnCompleteTask, this, _1, _2) // OnComplete sync callback   // _1 will be filter name // _2 will be error code 
       ); 

// schedule the new task - runs on the threadpool 
s_ThreadPool.schedule(task); 

ist dies der destructor:

s_ThreadPool.wait(0); 

können Sie bitte erklären?

Antwort

40

boost::thread_group ist eine Convenience-Klasse zum Ausführen von Thread-Management-Operationen für eine Sammlung von Threads. Anstatt beispielsweise über std::vector<boost::thread> zu iterieren und join() für jeden Thread aufzurufen, bietet thread_group eine bequeme join_all() Elementfunktion.

Mit boost::thread, unabhängig davon, dass es durch boost::thread_group verwaltet wird, hängt die Lebensdauer des Threads oft von der Arbeit ab, in der der Thread arbeitet. Wenn beispielsweise ein Thread erstellt wird, um eine rechenintensive Berechnung durchzuführen, kann der Thread beendet werden, sobald das Ergebnis berechnet wurde. Wenn die Arbeit nur von kurzer Dauer ist, kann der Overhead beim Erstellen und Löschen von Threads die Leistung beeinträchtigen.

Auf der anderen Seite ist ein threadpool ein Muster, wo eine Reihe von Threads eine Reihe von Aufgaben/Arbeit. Die Lebensdauer des Threads ist nicht direkt mit der Lebensdauer der Task verknüpft. Um mit dem vorherigen Beispiel fortzufahren, würde die Anwendung die rechenintensive Berechnung planen, die innerhalb des Threadpools ausgeführt werden soll. Die Arbeit wird innerhalb des Threadpools in die Warteschlange gestellt, und einer der Threadpool-Threads wird ausgewählt, um die Arbeit auszuführen. Sobald die Berechnung abgeschlossen ist, kehrt der Thread zurück und wartet darauf, dass mehr Arbeit mit dem Threadpool geplant wird. zu verwalten Lebensdauer von Threads und boost::asio::io_service für Aufgabe/Arbeit Dispatching

Wie in diesem threadpool Beispiel gezeigt, kann ein Threadpool mit boost::thread_group umgesetzt werden.

+0

sehr schön erklärt Antwort ... gibt die genaue Vorstellung – spt025