大规模并行计算ios

时间:2013-01-09 16:03:32

标签: ios objective-c multithreading parallel-processing

我有一种方法可以使用不同的数据重复执行数学运算(可能数百万次)。在iOs中执行此操作的最佳方式是什么(它将在iPad设备上运行)?我知道performSelectorOnBackgroundThread已弃用......?我还需要在NSArray中汇总所有结果。最好的方法似乎是:向通知中心发布通知并将方法添加为观察者。它是否正确?数组需要声明为原子,我相信...另外,我需要在操作完成时显示进度条...我可以并行启动多少个?我不认为在iDevice上启动1.000.000个线程是个好主意..

提前致谢...

2 个答案:

答案 0 :(得分:3)

查看Grand Central Dispatch,这是在iOS(和Mac)上进行多线程处理的首选方式。

使用GCD的一个简单示例如下:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    //do long running task here
}

这将执行主线程异步的块。 GCD有许多其他调度任务的方式,一个直接来自上面列出的维基百科文章:

dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t i){
     results[i] = do_work(data, i);
    });
total = summarize(results, count);

这个特定的代码示例可能正是您正在寻找的,假设您的“大任务”是embarrassingly parallel

答案 1 :(得分:2)

虽然您可以使用dispatch_apply()并同时分拆所有运行,但最终会变慢。

您希望能够同时限制飞行中的#次运行,同时计算的数量是您需要调整的。

我经常使用dispatch_semaphore_t来轻松调整正在进行的计算。

这样做的详细信息在这里答案:https://stackoverflow.com/a/4535110/25646