2013-05-21 12 views
19

Sto cercando di capire i diversi casi d'uso. e la differenza tra i 2 thread utilizza. This è un ottimo tutorial che ho letto che spiega boost::thread_group.boost :: threadpool :: pool vs.boost :: thread_group

e qui è un codice che sto usando:

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

questo è il distruttore:

s_ThreadPool.wait(0); 

si può spiegare?

risposta

40

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.

+0

risposta molto ben spiegata ... dà l'idea esatta – spt025