对于我的学校作业,我需要在 C 中的多个线程之间平均平衡负载。例如,我需要计算区间 [0, 50]
中的整数总和来平衡负载在 5 个线程中均等(线程的间隔和数量只是一个示例,它们可以是更大的值)。我的第一个想法是将间隔分为 5 个较小的间隔,例如[0,10], [10,20]...[40,50]
并将这些 block 中的每一个分配给一个特定线程。但后来我有些疑问,计算区间 [0,10] 中的整数和与计算区间 [40,50]
中的整数和是否具有相同的负载,因为显然数字后面的间隔更大,所以这让我想知道计算 10x10 是否与 100000x100000 的 CPU 负载相同?我应该担心这个吗?我们将非常感谢您的善意反馈。
附注英语不是我的母语,所以请原谅我的语法。
最佳答案
你应该非常担心。这是一个糟糕的设计。不仅某些间隔可能需要比其他间隔更多的工作,而且由于各种特定于实现的原因,某些线程可能比其他线程更快地前进。
因此,不要将大量工作分配给线程。让线程执行小 block 工作,然后在完成后执行另一 block 工作。这种方法更有意义。
本质上,您有一系列需要完成的工作。线程从队列中取出小工作单元并重复直到队列为空。
关于c - 在多个线程之间均衡负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23620743/