Данные сетевых соединений
Ведь мы можем и не знать, какой именно блок из группы будет завершен первым, но мы можем быть вполне уверены в том, что все эти блоки не завершатся одновременно. Это означает, что к тому времени, когда будет вызываться последний блок, указываемый функцией dispatch group notif у (), переменная firstResult или secondResult будет уже освобождена из оперативной памяти почти со 100%-ной вероятностью! В качестве выхода из этого положения можно просто сохранить каждый из результатов в блоке, где производится расчет, а затем освободить их из оперативной памяти в последнем блоке.
Итак, внеся упомянутые выше изменения, еще раз скомпилируйте и запустите рассматриваемое здесь приложение на выполнение, чтобы убедиться в том, что ваши усилия оказались ненапрасными. То, на что раньше требовалось 10 секунд, теперь отнимает всего семь секунд, благодаря тому, что оба расчета выполняются параллельно. Очевидно, что в данном вымышленном примере нам удается добиться максимального эффекта из-за того, что в обоих этих расчетах на самом деле ничего не делается, кроме перевода в состояние ожидания того потока, в котором они производятся. В реальном приложении ускорение будет зависеть от характера выполняемой работы и доступных ресурсов.
Данный способ распараллеливания может принести пользу при выполнении расчетов, требующих интенсивного использования вычислительных мощностей центрального процессора, только в том случае, если имеется многоядерный центральный процессор, но на момент написания этой книги отсутствовали мобильные устройства, работающие под управлениям системы iOS с многоядерными центральными процессорами. Впрочем, заметного ускорения работы можно добиться и на одно ядерном центральном процессоре, например, при одновременной выборке данных из нескольких сетевых соединений.
Как видите, диспетчер GCD не является панацеей. Его применение совсем не гарантирует автоматическое повышение быстродействия каждого приложения. Однако если аккуратно применять рассмотренные выше способы параллельной обработки в тех местах, где быстродействие имеет существенное значение, или же там, где приложение реагирует на действия пользователя с некоторым запаздыванием, то в конечном итоге можно добиться улучшения взаимодействия с пользователем в тех ситуациях, когда не удается повысить реальную производительность.
- Дата: 3-01-2015, 13:13