boost::pool de threads::piscine vs boost::thread_group
J'essaie de comprendre les différents cas d'utilisation. et la différence entre les 2 fil des utilisations.
Cette est un tutoriel que j'ai lu ce 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 expliquer?
Vous devez vous connecter pour publier un commentaire.
boost::thread_group
est une classe utilitaire pour effectuer fil opérations de gestion sur une collection de fils. Par exemple, au lieu d'avoir à parcourirstd::vector<boost::thread>
, en invoquantjoin()
sur chaque fil, lethread_group
fournit un moyen pratiquejoin_all()
fonction membre.Avec
boost::thread
, quel que soit l'être géré parboost::thread_group
, la durée de vie du fil dépend souvent de l'œuvre dans laquelle le fil est en train de faire. Par exemple, si un thread est créé pour effectuer un calcul coûteux calcul, puis le fil peut quitter une fois le résultat a été calculé. Si le travail est de courte durée, puis la surcharge de la création et de la destruction de threads peut affecter les performances.D'autre part, un threadpool est un modèle, d'où un nombre de threads de services un certain nombre de tâche. La durée de vie du fil 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 calendrier de l'gourmand en ressources de calcul à exécuter dans le thread de la piscine. Le travail sera mis en file d'attente dans le pool de threads, et l'un des pool de threads les threads seront sélectionnés pour effectuer le travail. Une fois le calcul terminé, le fil se remet en attente de plus de travail pour être programmée avec le pool de threads.
Comme indiqué dans ce threadpool exemple, un pool de threads peut être mis en œuvre avec
boost::thread_group
pour gérer la durée de vie de threads, etboost::asio::io_service
pour tâche de distribution.