Macos 如何使用GCD或类似工具确定适当的任务数量?

Macos 如何使用GCD或类似工具确定适当的任务数量?,macos,concurrency,grand-central-dispatch,task,Macos,Concurrency,Grand Central Dispatch,Task,我经常遇到这样的情况:我有大量的小操作,我想独立执行。在这些情况下,与每个操作所需的实际时间相比,操作的数量非常大,因此,由于开销,简单地为每个操作创建任务是不合适的,即使GCD开销通常很低 因此,您要做的是将操作的数量划分为好的块,其中每个任务操作一个块。但是如何确定适当数量的任务/块呢?测试和分析。什么是有意义的,什么工作良好是特定于应用程序的 基本上你需要决定两件事: 要生成的工作进程/线程数 他们将处理的块的大小 使用这两个数字,计算它们每秒完成的吞吐量任务*工人数量。在某个地方,你会发

我经常遇到这样的情况:我有大量的小操作,我想独立执行。在这些情况下,与每个操作所需的实际时间相比,操作的数量非常大,因此,由于开销,简单地为每个操作创建任务是不合适的,即使GCD开销通常很低


因此,您要做的是将操作的数量划分为好的块,其中每个任务操作一个块。但是如何确定适当数量的任务/块呢?

测试和分析。什么是有意义的,什么工作良好是特定于应用程序的

基本上你需要决定两件事:

要生成的工作进程/线程数 他们将处理的块的大小 使用这两个数字,计算它们每秒完成的吞吐量任务*工人数量。在某个地方,你会发现在速度、工人数量和任务数量之间有一个很好的平衡

通过向员工提供大量测试数据(基本上是一个基准测试),并在调整这两个变量的同时自动测量他们的吞吐量,您可以使找到正确的平衡变得更加简单。记录每个工作区大小/任务块大小组合的吞吐量,并在最后输出。最高的吞吐量是您的最佳组合

最后,如果一项特定任务需要多长时间确实取决于任务本身,例如有些任务需要X倍的时间,而有些任务需要X*3倍的时间,那么您可以采取几种方法。根据您即将进行的工作的性质,您可以尝试以下方法之一:

输入您的基准历史数据—要处理的一组真实数据,这些数据表示将进入工作网格的实际工作类型,并使用该示例数据测量吞吐量。 生成随机大小的任务,这些任务跨越您认为将要看到的范围,并选择在多个任务大小中平均效果最好的组合 如果您可以读取任务中的数据,并且这些数据会让您知道该任务是否需要X个时间,或者X*3或介于两者之间的时间,那么您可以在处理任务之前使用这些信息来动态调整工作人员/任务大小,以根据当前工作负载实现最佳吞吐量。AmazonEC2采用这种方法,例如,当需要处理更高负载时,客户会启动额外的虚拟机,当负载下降时,客户会将其降下来。 无论您选择什么,任何未知的速度问题几乎都应该涉及某种演示基准测试,如果它的运行速度对应用程序的成功至关重要,那么有时处理时间非常短,可以忽略不计

祝你好运