【问题标题】:iOS GCD Max concurrent operationsiOS GCD 最大并发操作数
【发布时间】:2016-04-01 12:42:59
【问题描述】:

在 iPad 上,可以启动多少并行操作才能获得最佳性能?在每次运行查询操作、计算等...

这取决于 iPad 型号 (CPU)?

      int count = [objects count];
  if (count > 0)
  {
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    for (int i = 0; i < count; i++)
    {
      dispatch_group_async(group, queue, ^{
        for (int j = i + 1; j < count; j++)
        {
          dispatch_group_async(group, queue, ^{
            /** LOTS AND LOTS OF WORK FOR EACH OBJECT **/
          });
        }
      });
    }

        dispatch_group_notify(group, queue, ^{
/** END OF ALL OPERATIONS */
    };


  }

【问题讨论】:

  • 您可以在 GCD 中执行 64 个并发操作(每个顶级并发队列)的硬性限制 - 所以您希望保持在该值以下。 See my answer herethis answer here 了解更多信息。至于您首先需要执行多少并发操作 - 这确实是一个 UX 问题,as daredevil says

标签: ios objective-c concurrency cpu grand-central-dispatch


【解决方案1】:

这基本上是一个用户体验问题。取决于最终用户的需求。
他真的需要所有这些计算快速开始和结束吗?
您可以延迟其中的一些或大部分吗?
最好通知用户每次计算的进度(进度条)并在完成时通知他。
让他选择开始/停止/暂停(这是一个非常重要的功能)。

如果所有任务都是本地任务 - CPU 密集型,并且与网络资源获取无关,那么它取决于每个 CPU 设备 - 它可以并行运行多少线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多