【问题标题】:boost::threadpool::pool vs.boost::thread_groupboost::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);

你能解释一下吗?

【问题讨论】:

    标签: c++ multithreading boost-asio boost-thread


    【解决方案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 实现任务/工作调度。

    【讨论】:

    • 很好解释的答案...给出了确切的想法
    猜你喜欢
    • 2012-04-11
    • 2013-10-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2019-01-07
    相关资源
    最近更新 更多