Ответ 1
В глобальных параллельных очередях GCD нет порядка, передавая один из них dispatch_sync() noop и dispatch_sync() будет просто выполнять указанный блок непосредственно в этом случае, как если бы вы написали
^{...}();
Я запускаю этот код
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSLog(@"Main Thread? %d", [NSThread isMainThread]);
// non-trivial non-UI code here
});
NSLog
указывает, что я нахожусь в основном потоке, но... мое впечатление, что нетривиальный не-пользовательский код работает намного быстрее, если я использую dispatch_sync
(в отличие от ничего).
Если он работает в основном потоке, может ли он быть быстрее?
В глобальных параллельных очередях GCD нет порядка, передавая один из них dispatch_sync() noop и dispatch_sync() будет просто выполнять указанный блок непосредственно в этом случае, как если бы вы написали
^{...}();
Ограничивая количество запущенных потоков, технически уверен, что вы можете повысить производительность, однако это не рекомендуется. Если у вас есть задание, на которое потребуется значительное количество времени (существенное значение будет влиять на пользовательский интерфейс), просто используйте новый поток, используя dispatch_async
или встроенный блок (закрытие). Лучшим вариантом является оптимизация вашего алгоритма для улучшения длины вашей задачи.
Вы не заметите существенной разницы в скорости, запустив основной поток.