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 для задача / работа диспетчеризация.