web-dev-qa-db-fra.com

boost :: threadpool :: pool contre boost :: thread_group

J'essaie de comprendre les différents cas d'utilisation. et la différence entre les 2 utilisations de fil. This est un excellent tutoriel que j'ai lu et qui explique boost::thread_group.

et voici un code que j'utilise:

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);

c'est le destructeur:

s_ThreadPool.wait(0);

pouvez-vous s'il vous plaît expliquer?

19
Gilad

boost::thread_group est une classe pratique pour effectuer des opérations de gestion de threads sur une collection de threads. Par exemple, au lieu d'avoir à parcourir std::vector<boost::thread>, En invoquant join() sur chaque thread, le thread_group Fournit une fonction membre join_all() pratique.

Avec boost::thread, Indépendamment du fait qu'il soit géré par boost::thread_group, La durée de vie du thread dépend souvent du travail effectué par le thread. Par exemple, si un thread est créé pour effectuer un calcul coûteux, le thread peut se fermer une fois que le résultat a été calculé. Si le travail est de courte durée, la surcharge liée à la création et à la destruction de threads peut affecter les performances.

D'autre part, a threadpool est un modèle, où un certain nombre de threads dessert un certain nombre de tâches/travaux. La durée de vie du thread n'est pas directement associée à la durée de vie de la tâche. Pour continuer avec l'exemple précédent, l'application planifierait le calcul coûteux à exécuter dans le pool de threads. Le travail sera mis en file d'attente dans le pool de threads et l'un des threads du pool de threads sera sélectionné pour effectuer le travail. Une fois le calcul terminé, le thread revient à attendre que davantage de travail soit planifié avec le pool de threads.

Comme indiqué dans cet exemple threadpool , un threadpool peut être implémenté avec boost::thread_group Pour gérer la durée de vie des threads, et boost::asio::io_service Pour la répartition des tâches/travaux.

42
Tanner Sansbury