首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11动态线程池

C++11动态线程池
EN

Stack Overflow用户
提问于 2014-02-26 01:42:43
回答 2查看 9.5K关注 0票数 8

最近,我一直试图找到一个用于线程并发任务的库。理想情况下,调用线程上的函数的简单接口。任何时候都有n个线程,一些线程比其他线程完成得更快,到达的时间也不同。

首先,我尝试了Rx,这在c++中是很棒的。我也研究过块和TBB,但它们要么依赖于平台。对于我的原型,我需要保持平台无关,因为我们还不知道它将运行在什么上,并且在做出决定时可以改变。

C++11有很多用于线程和并发的东西,我发现了一些类似于线程池的例子。

https://github.com/bilash/threadpool

类似的项目使用相同的lambda表达式来处理std::线程和std::mutex。

这看起来很适合我需要的东西。有一些问题。池由定义的线程数启动,任务排队直到线程空闲为止。

如何添加新线程?删除过期线程?(.Join()?)

显然,对于已知数量的线程来说,这要容易得多,因为它们可以在ctor中初始化,然后在dtor中连接()。

这里有来自有C++并发经验的人的任何提示或提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-15 19:08:30

  1. 从系统可以支持的最大线程数开始: int Num_Threads = thread::hardware_concurrency();
  2. 对于高效的线程池实现,一旦根据Num_Threads创建了线程,最好不要创建新线程,也不要破坏旧线程(通过加入)。这将导致性能损失,甚至可能会使您的应用程序比串行版本慢。 每个C++11线程都应该在其函数中使用无限循环运行,不断等待新任务的获取,而run.Here则是如何将这样的函数附加到线程池中: int Num_Threads = thread::hardware_concurrency();向量池;for(int = 0;ii < Num_Threads;ii++) {
  3. The Infinite_loop_function 这是一个等待任务队列的"while(true)“循环。 void The_Pool::Infinite_loop_function() { while(true) {{ unique_lock锁(Queue_Mutex);condition.wait(锁,[]{返回!Queue.empty()});作业= Queue.front();Queue.pop();}unique_lock();// function type };
  4. 创建一个函数,将作业添加到队列中。 The_Pool::Add_Job(function New_Job) { unique_lock锁(Queue_Mutex);Queue.push(New_Job);} condition.notify_one();}
  5. 将任意函数绑定到队列 ( Pool_Obj.Add_Job(std::bind(&Some_Class::Some_Method,&Some_object);

一旦集成了这些元素,您就有了自己的动态线程池。这些线程总是运行,等待作业完成。

票数 8
EN

Stack Overflow用户

发布于 2019-12-11 15:29:12

这应该很容易使用:https://pocoproject.org/docs/Poco.ThreadPool.html

线程池总是保持许多线程运行,随时准备接受工作。创建和启动线程会给应用程序带来很大的运行时开销。线程池通过减少必须创建的线程数量(并再次销毁)来帮助提高应用程序的性能。线程池中的线程一旦再次可用,就会被重用.线程池始终保持最小数量的线程运行。如果线程的需求增加,则会创建其他线程。一旦对线程的需求再次下降,不再使用的线程将被停止并从池中删除。

代码语言:javascript
复制
ThreadPool(
    int minCapacity = 2,
    int maxCapacity = 16,
    int idleTime = 60,
    int stackSize = 0
);

这是一个非常好的库,很容易使用,不像Boost:

https://github.com/pocoproject/poco

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22030027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档