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