Скорее всего, они работают одновременно. Они могут работать не параллельно. Важно знать разницу. GCD обеспечивает параллелизм, это мало обещания о параллелизме. Это верно для многих библиотек (и обычно это более важная функция).
Сколько у вас ядер? Если у вас только одно ядро, то неудивительно, если второе задание будет ждать завершения первого. Если у вас есть два ядра, но в основной очереди много работы, то она, скорее всего, получит приоритет перед одним из ваших блоков. Вы должны использовать инструменты GCD в инструментах, чтобы узнать, когда что-то планируется (printf
также является мощным инструментом здесь). Помните, переключение контекста требует времени. Чтобы получить наилучшую пропускную способность ядра, вы хотите запустить на нем одно действие, пока оно не будет завершено, а затем запустить следующее. Переключение вперед и назад, чтобы они завершились вместе, заставит их работать медленнее. Большинство систем ориентированы на пропускную способность. Нет причин менять блок, чтобы запустить блок с таким же приоритетом.
Знаете ли вы, что оба задания получают свои данные одновременно? Если вы берете данные из сети, вполне возможно, что один из них появится намного раньше или быстрее, чем другой. Возможно, вы выполняете конвейерную обработку одного соединения, что может сериализовать сетевой трафик. Вы должны регистрировать, когда данные попадают к вам. Вы также должны регистрировать, когда ваш блок фактически начинается (поставьте printf()
в верхней части блока).
Если вам нужно, чтобы первое задание дождалось завершения второго перед обновлением пользовательского интерфейса, вам следует поместить оба задания в dispatch_group, чтобы reloadData
ждал их.
Вам действительно нужно копаться в том, что работает и когда. Этот симптом иногда может означать, что вы обновляете свой пользовательский интерфейс в фоновом потоке где-то еще. Это может привести к длительным задержкам в получении правильного обновления (возможно, не имея никакого отношения к этому коду). Ввод операторов printf()
и использование инструментов важны для того, чтобы убедиться, что вы знаете, что на самом деле происходит.
Вы можете разбить свою работу на более мелкие части и чередовать их, если темп важнее, чем пропускная способность (что вы предлагаете).
25.07.2014