boost::thread_group
- удобный класс для выполнения операций управления потоками в коллекции потоков. Например, вместо необходимости перебирать std::vector<boost::thread>
, ссылаясь на join()
на каждую нить, thread_group
обеспечивает удобную функцию-член join_all()
.
С boost::thread
, независимо от того, что он управляется boost::thread_group
, срок службы нити часто зависит от работы, в которой работает нить. Например, если поток создан для выполнения дорогостоящего вычисления, то поток может выйти после вычисления результата. Если работа недолговечна, то накладные расходы на создание и уничтожение потоков могут повлиять на производительность.
С другой стороны, threadpool - это шаблон, в котором количество потоков обслуживает ряд задач/работы. Время жизни потока напрямую не связано с временем жизни задачи. Чтобы продолжить работу с предыдущим примером, приложение будет планировать вычисление дорогостоящего вычисления для запуска в пуле потоков. Работа будет поставлена в очередь в threadpool, и один из потоков threadpool будет выбран для выполнения работы. По завершении вычисления поток вернется к ожиданию дополнительной работы, запланированной с помощью threadpool.
Как показано в этом примере threadpool, пул потоков может быть реализован с помощью boost::thread_group
для управления временем жизни потоков и boost::asio::io_service
для диспетчеризации задачи/работы.
очень красиво объясненный ответ ... дает точную идею – spt025