Выпуском Snow Leopard Apple получил в свой адрес добротную долю критики как от экспертов, так и обыкновенных пользователей, разбалованных 300+ новыми функциями обычного Леопарда. Правда, с самого начала в Купертино сказали, что компании  было не до этого, мол, переписывали почти все приложения, занимались оптимизацией системы и закладывали фундамент на будущее.

Одним из таких «кирпичиков» операционной системы-мечты является технология Grand Central Dispatch (GCD), про которую мы и поговорим более подробно.

Но прежде всего, задайтесь себе вопросом. Сколько ядер в вашем компьютере? Два? Четыре? Восемь? А сколько из них используется в системе «на полную катушку» приложениями сторонних разработчиков? А Бог его знает!

При проектировании новой системы, изучая потребности разработчиков и пользователей, в Купертино наткнулись на проблему недостаточно эффективного использования многоядерных процессоров: с одной стороны, переработка приложений под такую конфигурацию отнимает много времени (а время=деньги), с другой — как правильные, так и неправильные реализации возможности многопроцессорных систем могут существенно снизить быстродействие компьютера в целом, как ни парадоксально это звучит на первый взгляд (ресурсы все любят и все за них «дерутся» 🙂 ).

Поэтому-то ведущие умы Apple и решили создать для обыкновенных программистов простую и прозрачную технологию, которая распределит все задачи между ядрами одного (хотя почему одного?) процессора, не требуя обширных познаний в этом вопросе. Достаточно добавить в код приложения дюжину инструкций и система возмет на себя все заботы блокировки данных, балансирования нагрузки, управления потоками и т.д.

Впервые данная технология была представлена на WWDC ’09 в рамках одной из революционных функций Mac OS X Snow Leopard. Название Grand Central Dispatch (да и иконка) было выбрано не случайно — это намек на самый оживленный вокзал Нью Йорка, Grand Central Terminal, являющийся, к тому же, крупнейшим вокзалом в мире по количеству платформ (44) и путей (67). Можете представить, что там творится, а в компьютере все намного сложнее? 🙂

GCD позволяет распределять параллельные задачи в приложении, запускать их выполнение при наличии свободных ядер процессора, также использовать потоки на низком уровне, скрывая все детали от посторонних взглядов. Теперь, для добавления задачи в очередь нужно порядка 15 процессорных инструкций, в то время как «классическое» создание потока требует сотни инструкций и в 50 раз больше времени.

Задача GCD может быть использована для создания рабочего элемента, который может быть помещен в очередь задач или привязан к источнику события с добавлением в соответствующую очередь при его выполнении. Apple утверждает, что этот вариант более эффективен, нежели создание отдельного потока, ожидающего завершения события.

Платформа GCD объявляет несколько типов данных и функций:

  • Объекты Dispatch Queues обуславливают очереди задач. Библиотека автоматически создает несколько очередей с различными уровнями приоритета и выполняет несколько задач одновременно, выбирая их оптимальное количество для запуска.
  • Объекты Dispatch Sources позволяют регистрировать блоки или функции для их асинхронного выполнения.
  • Объекты Dispatch Groups позволяют объединять задачи в группы.
  • Объекты Dispatch Semaphores устанавливают ограничение на выполнение нескольких задач одновременно.

К сожалению, большинство разработчиков на данный момент совершенно неоправданно игнорируют эту технологию. Однако к следующей версии Mac OS X Apple приложит все усилия для популяризации GCD. И действительно, зачем программистам изобретать своим велосипеды, если компания предлагает готовое, эффективное решение, способное сохранить им не только время, но и нервы.

Более подробно ознакомиться с этой технологией и найти примеры можно по ссылкам:


Читайте также: