Крупное параллельное вычисление iOS

У меня есть метод, который неоднократно выполняет математическую операцию (возможно миллионы на временах) с различными данными. Что лучший способ состоит в том, чтобы сделать это в iOS (это будет работать на устройствах iPad)? Я понимаю, что performSelectorOnBackgroundThread удерживается от использования...? Я также должен соединить все результаты в NSArray . Лучший способ, кажется: опубликуйте уведомление Центру Уведомления и добавьте метод как наблюдателя. Это правильно? Множество должно будет быть объявлено как атомное, я верю... Плюс я должен буду показать индикатор выполнения как завершенные операции... Сколько три я могу начать параллельно? Я не думаю, начиная 1.000.000 нитей, такая хорошая идея о продукте компании Apple..

Заранее спасибо...

1
nl ja de
Вы уверенный вы wouldn' t нравится иметь IFrontEnd ни к (какому-i) главному компьютеру с направленными возможностями с массовым параллелизмом?
добавлено автор Wes Miller, источник
До сих пор все тестирование было сделано на симуляторе..., который намного быстрее..., вычисления не зависят ни от одного из результатов всех других вычислений..., они независимы
добавлено автор user1028028, источник
Вы уже проверили наивный подход (управляющий им просто последовательно на главной нити) и проверили, чтобы видеть, сколько времени это берет (если так, сколько времени)? Какое-либо из вычислений зависит от результатов других вычислений?
добавлено автор Kitsune, источник

2 ответы

Изучить Центральная отправка, это - предпочтительный способ сделать мультипронизывание на 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 есть многочисленные другие способы отправить задачи, один взятый непосредственно из упомянутой выше статьи Wikipedia:

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

Этот конкретный пример кода, вероятно, точно, что вы ищете, предполагая, что этой "большой задачей", вашей, является a смущающе параллельный.

3
добавлено
это смущающе параллельно... (it' s алгоритм Монте-Карло)
добавлено автор user1028028, источник

В то время как вы могли использовать dispatch_apply() и отделяют все пробеги одновременно, это закончит тем, что было медленнее.

Вы захотите быть в состоянии задушить # пробегов в полете одновременно с # одновременных вычислений, являющихся чем-то, что необходимо будет настроить.

Я часто использовал dispatch_semaphore_t , чтобы допускать легкую настройку # вычислений в полете.

Details of doing so are in an answer here: https://stackoverflow.com/a/4535110/25646

2
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.