boost::thread_group
è una classe di convenienza per l'esecuzione di operazioni di gestione dei thread su una raccolta di thread. Ad esempio, invece di dover eseguire iterazioni su std::vector<boost::thread>
, richiamando join()
su ciascun thread, lo thread_group
fornisce una comoda funzione membro join_all()
.
Con boost::thread
, indipendentemente dal fatto che sia gestito da boost::thread_group
, la durata del thread dipende spesso dal lavoro in cui si sta svolgendo il thread. Ad esempio, se viene creato un thread per eseguire un calcolo computazionalmente costoso, il thread può uscire una volta che il risultato è stato calcolato. Se il lavoro è di breve durata, il sovraccarico di creazione e distruzione dei thread può influire sulle prestazioni.
D'altra parte, uno threadpool è un modello, in cui un numero di thread fornisce un numero di attività/lavoro. La durata del thread non è direttamente associata alla durata dell'attività. Per continuare con l'esempio precedente, l'applicazione pianifica il calcolo computazionalmente costoso da eseguire all'interno del pool di thread. Il lavoro verrà accodato all'interno del threadpool e uno dei thread del threadpool verrà selezionato per eseguire il lavoro. Una volta completato il calcolo, il thread torna in attesa di ulteriori lavori da pianificare con il threadpool.
Come illustrato nell'esempio threadpool, è possibile implementare un pool di thread con boost::thread_group
per gestire la durata dei thread e boost::asio::io_service
per l'invio di attività/lavoro.
fonte
2013-05-21 20:36:51
risposta molto ben spiegata ... dà l'idea esatta – spt025