我有一个N个作业池,我希望有一个M(= CPU数)线程的恒定负载。我怎么能用C ++做到这一点?
我已经了解了C ++线程库的基础知识。最简单的方法是排队M个工作并等待所有工作完成。然后排队另外M个工作。只要有剩余的工作,就这样做。
只要每个作业/线程花费大约相同的时间,这种简单的方法就可以正常工作。如果不是这种情况,很容易发生一个长线程仍在工作而其他所有线程完成的情况。因此,只加载了M个CPU中的一个。
所以我需要一种线程管理。而不是等待所有线程,我必须不断检查正在运行的线程数,并在必要时将新的线程排入队列。
C ++中是否已经实现了类似的功能?否则,实现这样一个经理最简单/最聪明的方式是什么?
答案 0 :(得分:0)
所以我需要一种线程管理。而不是等待所有线程,我必须不断检查正在运行的线程数,并在必要时将新的线程排入队列。
C ++中是否已经实现了类似的功能?
有一个Task Scheduler in Intel Thread Building blocks library,可以高效地将用户任务负载平衡到可用的CPU上。