Подтвердить что ты не робот

Boost:: threadpool:: pool vs .boost:: thread_group

Я пытаюсь понять различные варианты использования. и разница между использованием двух потоков. This - отличный учебник, который я прочитал, в котором объясняется 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);

Не могли бы вы объяснить?

4b9b3361

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