boost:: threadpool:: пул vs. boost:: группа потоков
Я пытаюсь понять различные варианты использования. и разница между 2 нитками используется.
этой это отличный учебник, который я прочитал, который объясняет boost::thread_group
.
а вот код, который я использую:
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);
это деструктор:
s_ThreadPool.wait(0);
не могли бы вы объяснить?
1 ответов
boost::thread_group
- это класс удобства для выполнения операций управления потоками в коллекции потоков. Например, вместо того, чтобы перебирать std::vector<boost::thread>
вызов join()
на каждом потоке,thread_group
обеспечивает удобный join_all()
функции-члена.
С boost::thread
, независимо от того, что он управляется boost::thread_group
, время жизни потока часто зависит от работы, в которой поток делает. Например, если поток создан для выполнения вычислительно дорогостоящий расчет, затем поток может выйти после вычисления результата. Если работа недолговечна, то накладные расходы на создание и уничтожение потоков могут повлиять на производительность.
С другой стороны, a класса ThreadPool - это шаблон, в котором ряд потоков обслуживает ряд задач/работ. Время жизни потока напрямую не связано со временем жизни задачи. Чтобы продолжить предыдущий пример, приложение будет запланируйте выполнение дорогостоящего вычисления в пуле потоков. Работа будет поставлена в очередь в threadpool, и один из потоков threadpool будет выбран для выполнения работы. После завершения вычисления поток возвращается к ожиданию дополнительной работы, запланированной с помощью threadpool.
как показано в этой threadpool пример, threadpool может быть реализован с помощью boost::thread_group
для управления временем жизни потоков и boost::asio::io_service
для задача / работа диспетчеризация.