Gil*_*lad 19 c++ multithreading boost-thread boost-asio
我试图了解不同的用例.和2线程使用之间的区别.
这是我读过的一个很棒的教程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);
Run Code Online (Sandbox Code Playgroud)
这是析构函数:
s_ThreadPool.wait(0);
Run Code Online (Sandbox Code Playgroud)
你能解释一下吗?
Tan*_*ury 44
boost::thread_group是一个便利类,用于对线程集合执行线程管理操作.例如,不必迭代std::vector<boost::thread>,join()在每个线程上调用,thread_group提供了一个方便的join_all()成员函数.
随着boost::thread,不管它被管理boost::thread_group,该线程的生命周期往往取决于其线程正在做的工作.例如,如果创建线程以执行计算上昂贵的计算,则一旦计算结果,线程就可以退出.如果工作是短暂的,那么创建和销毁线程的开销会影响性能.
另一方面,线程池是一种模式,其中许多线程服务于许多任务/工作.线程的生命周期与任务的生命周期没有直接关联.要继续前面的示例,应用程序将安排计算上昂贵的计算在线程池中运行.该工作将在线程池中排队,并且将选择其中一个线程池的线程来执行工作.计算完成后,线程返回等待使用线程池安排更多工作.
如此线程池示例所示,可以实现boost::thread_group线程池来管理线程的生命周期以及boost::asio::io_service任务/工作分派.
| 归档时间: |
|
| 查看次数: |
26226 次 |
| 最近记录: |