boost::threadpool::pool vs.boost::thread_group
Posted
技术标签:
【中文标题】boost::threadpool::pool vs.boost::thread_group【英文标题】: 【发布时间】:2013-05-16 15:36:12 【问题描述】:我试图了解不同的用例。以及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);
你能解释一下吗?
【问题讨论】:
【参考方案1】:boost::thread_group
是一个方便类,用于对线程集合执行线程管理操作。例如,thread_group
提供了一个方便的 join_all()
成员函数,而不是必须在每个线程上迭代 std::vector<boost::thread>
和调用 join()
。
对于boost::thread
,不管它是否由boost::thread_group
管理,线程的生命周期通常取决于线程正在执行的工作。例如,如果创建一个线程来执行计算量很大的计算,那么一旦计算出结果,该线程就可以退出。如果工作是短暂的,那么创建和销毁线程的开销会影响性能。
另一方面,threadpool 是一种模式,其中多个线程服务于多个任务/工作。线程的生命周期与任务的生命周期没有直接关联。继续前面的示例,应用程序将安排计算量大的计算在线程池中运行。工作将在线程池中排队,并选择线程池的线程之一来执行工作。计算完成后,线程返回等待线程池安排更多工作。
如threadpool 示例所示,可以使用boost::thread_group
实现线程池以管理线程的生命周期,并使用boost::asio::io_service
实现任务/工作调度。
【讨论】:
很好解释的答案...给出了确切的想法以上是关于boost::threadpool::pool vs.boost::thread_group的主要内容,如果未能解决你的问题,请参考以下文章
selenium chromedriver geckodriver iedriverserver下载
Vue.js常用指令汇总(v-if//v-show//v-else//v-for//v-bind//v-on等)
根据每个元素的i属性,由小到大排列如下数组ar=[{i:5,v:1},{i:5,v:4},{i:2,v:1},{i:1,v:3},{i:3,v:2},{i:6,v:1},{i:4,v:1}];