是否存在类似以下内容的线程模型:
while thread = nextAvailableThread():
thread.doWork(data)
这样当一个线程完成时,它会触发nextAvailableThread()以返回刚完成的线程。这个模型会使线程之间的数据块分布更加容易,因为您可以将下一个数据块传递给下一个可用线程,并产生接近最优的数据分布。
我对在C ++中使用它特别感兴趣,但我很高兴在这里有任何语言存在这样的东西吗?
编辑:线程池看起来就像我在想的那样。那么,有关C ++实现的任何建议吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
您可以使用阻止工作队列和一组工作线程。 Java有ThreadPoolExecutor
,我确信.NET有一个类似的库。
答案 2 :(得分:1)
试试这个:threadpool
答案 3 :(得分:1)
如果您使用.Net,则可以查看Task Parallel Library。
该库非常易于使用,但内部也有许多强大的功能。在它最简单的形式中,你会像这样使用它:
Parallel.For(0, 100, delegate(int i) {
a[i] = a[i]*a[i];
});
美妙的是,只要核心准备好执行,它就会执行每个任务。在 n 核心机器上,它在任何给定时刻都只有 n 活动线程。
如果你有时间,可以看看Daniel Moth的this session。即使您没有使用.Net,也可以看到一些如何解决这些问题的例子。
答案 4 :(得分:0)
生产者/消费者模式可能正是您所寻找的。 p>
在最基本的配置中,您需要2个并发组件:thradsafe队列和工作线程池。您可以在网上找到这些的好例子。