2013-05-21 12 views
19

Próbuję zrozumieć różne przypadki użycia. i różnica między dwoma wątkami. This to świetny samouczek, który przeczytałem, który wyjaśnia boost::thread_group.boost :: threadpool :: pool vs.boost :: thread_group

i tutaj jest kod używam:

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

to destruktor:

s_ThreadPool.wait(0); 

można proszę wyjaśnić?

Odpowiedz

40

to klasa wygody do wykonywania operacji zarządzania wątkami w zbiorze wątków. Na przykład zamiast wykonywania iteracji ponad std::vector<boost::thread>, wywołując join() na każdym wątku, thread_group zapewnia wygodną funkcję składową join_all().

Z boost::thread, niezależnie od tego, czy jest zarządzany przez boost::thread_group, czas życia wątku jest często zależny od pracy, w której wykonywany jest wątek. Na przykład, jeśli wątek zostanie utworzony w celu wykonania kosztownej obliczeniowo kalkulacji, wątek może zakończyć się po obliczeniu wyniku. Jeśli praca jest krótkotrwała, narzut tworzenia i niszczenia wątków może wpływać na wydajność.

Z drugiej strony, threadpool to wzorzec, w którym wiele wątków obsługuje pewną liczbę zadań/zadań. Żywotność wątku nie jest bezpośrednio związana z czasem życia zadania. Aby kontynuować z poprzednim przykładem, aplikacja zaplanuje obliczanie kosztownych kalkulacji w puli wątków. Praca zostanie umieszczona w kolejce w obrębie wątku, a jeden z wątków wątku zostanie wybrany do wykonania pracy. Po zakończeniu obliczeń wątek wraca do oczekiwania na zaplanowanie dalszych prac z użyciem wątku.

Jak pokazano w tym przykładzie threadpool, za pomocą boost::thread_group można zaimplementować wątek, aby zarządzać czasem życia wątków, oraz boost::asio::io_service dla wysyłania zadań/pracy.

+0

bardzo ładnie wyjaśniona odpowiedź ... podaje dokładny pomysł – spt025

Powiązane problemy