c++ - boost::threadpool::pool vs.boost::thread_group

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

我试图了解不同的用例。以及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);

你能解释一下吗?

最佳答案

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用于任务/工作调度。

关于c++ - boost::threadpool::pool vs.boost::thread_group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677287/

相关文章:

c++ - 函数的前向声明搞砸了,说 args 是未声明的标识符

java - 为什么我的生产者消费者程序结束了?

multithreading - boost asio 处理程序中的长时间运行/阻塞操作

c++ - 写入套接字后管道损坏

c++ - 使用 Boost::Signals 进行 C++ 事件的完整示例

c++ - 使用 const,获取参数 NOT by-copy

c++ - 理解虚函数和指针的使用

objective-c - Obj-C设计模式: parallel task launcher

java - java中如何实现异步线程间通信?

c++ - boost ASIO : Why don't I get "bind: Address already in use" in Windows (but do get it in Linux)?