最近,我一直试图找到一个用于线程并发任务的库。理想情况下,调用线程上的函数的简单接口。任何时候都有n个线程,一些线程比其他线程完成得更快,到达的时间也不同。
首先,我尝试了Rx,这在c++中是很棒的。我也研究过块和TBB,但它们要么依赖于平台。对于我的原型,我需要保持平台无关,因为我们还不知道它将运行在什么上,并且在做出决定时可以改变。
C++11有很多用于线程和并发的东西,我发现了一些类似于线程池的例子。
https://github.com/bilash/threadpool
类似的项目使用相同的lambda表达式来处理std::线程和std::mutex。
这看起来很适合我需要的东西。有一些问题。池由定义的线程数启动,任务排队直到线程空闲为止。
如何添加新线程?删除过期线程?(.Join()?)
显然,对于已知数量的线程来说,这要容易得多,因为它们可以在ctor中初始化,然后在dtor中连接()。
这里有来自有C++并发经验的人的任何提示或提示吗?
发布于 2015-09-15 19:08:30
一旦集成了这些元素,您就有了自己的动态线程池。这些线程总是运行,等待作业完成。
发布于 2019-12-11 15:29:12
这应该很容易使用:https://pocoproject.org/docs/Poco.ThreadPool.html
线程池总是保持许多线程运行,随时准备接受工作。创建和启动线程会给应用程序带来很大的运行时开销。线程池通过减少必须创建的线程数量(并再次销毁)来帮助提高应用程序的性能。线程池中的线程一旦再次可用,就会被重用.线程池始终保持最小数量的线程运行。如果线程的需求增加,则会创建其他线程。一旦对线程的需求再次下降,不再使用的线程将被停止并从池中删除。
ThreadPool(
int minCapacity = 2,
int maxCapacity = 16,
int idleTime = 60,
int stackSize = 0
);这是一个非常好的库,很容易使用,不像Boost:
https://stackoverflow.com/questions/22030027
复制相似问题