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.
bardzo ładnie wyjaśniona odpowiedź ... podaje dokładny pomysł – spt025