我正在尝试了解不同的用例。和2线程使用之间的区别。
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);
你可以解释一下吗?
答案 0 :(得分:42)
boost::thread_group
是一个便捷类,用于对线程集合执行线程管理操作。例如,std::vector<boost::thread>
不是必须迭代join()
,而是在每个线程上调用thread_group
,而是提供方便的join_all()
成员函数。
使用boost::thread
,无论它是由boost::thread_group
管理,线程的生命周期通常都取决于线程正在进行的工作。例如,如果创建线程以执行计算上昂贵的计算,则一旦计算结果,线程就可以退出。如果工作是短暂的,那么创建和销毁线程的开销会影响性能。
另一方面,threadpool是一种模式,其中许多线程服务于许多任务/工作。线程的生命周期与任务的生命周期没有直接关联。要继续前面的示例,应用程序将安排计算上昂贵的计算在线程池中运行。该工作将在线程池中排队,并且将选择其中一个线程池的线程来执行工作。计算完成后,线程将返回等待使用线程池安排更多工作。
如此threadpool示例所示,可以使用boost::thread_group
实现线程池来管理线程的生命周期,并使用boost::asio::io_service
来执行任务/工作调度。