我经常遇到一些情况,即我需要独立执行大量小型操作。在这些情况下,与每个操作所花费的实际时间相比,操作的数量是如此之大,因此,即使GCD开销通常较低,由于开销,仅为每个操作创建任务也是不合适的。
所以你想要做的就是将操作数分成很好的块,每个任务在一个块上运行。但是如何确定适当的任务/块数?
答案 0 :(得分:0)
测试和分析。什么是有道理的,什么是有效的是特定于应用程序。
基本上你需要决定两件事:
使用这两个数字进行游戏,并计算其吞吐量(每秒完成的任务数*工人数)。在某个地方,你会发现速度,工人数量和大块任务数量之间的良好平衡。
通过为工作人员提供大量测试数据(实质上是基准测试数据)并在调整这两个变量时自动测量其吞吐量,您可以更简单地找到合适的平衡点。记录每个工人大小/任务块大小组合的吞吐量,并在最后输出。 最高吞吐量是您的最佳组合。
最后,如果特定任务需要多长时间取决于任务本身(例如,某些任务需要X
时间,而有些任务需要花费X*3
时间,那么您可以采取几种方法根据您工作的性质,您可以尝试以下方法之一:
X
时间,或X*3
(或介于两者之间),您可以在处理任务本身之前使用该信息来动态调整工作者/任务大小,以根据当前工作负载实现最佳吞吐量。这种方法适用于Amazon EC2,客户将在需要时启动额外的VM以处理更高的负载,并在负载下降时将其旋转回来。例如。无论您选择什么,任何未知的速度问题几乎总是涉及某种演示基准测试,如果它运行的速度对您的应用程序的成功至关重要(有时处理的时间太短,可以忽略不计)
祝你好运!