Курс CS193p Winter 2017 «Developing iOS 10 Apps with Swift» на подходе.

Стэнфордский курс CS193p Зима 2017 «Developing iOS 10 Apps with Swift» уже появился на iTunes, но пока там только заголовок и описание. По-видимому, идет оформление, и первые лекции появятся в ближайшее время.
1 февраля ссылка на этот курс в iTunes исчезла. Я не знаю, что это означает — идет оформление материала, курс будет выложен позже или не будет выложен вообще (что уже было осенью 2015 года). Ждем развития событий.

Concurrency (многопоточность) в Swift 3 (GCD и Dispatch Queues).

Надо сказать, что многопоточность (сoncurrency) в iOS всегда входит в вопросы, задаваемые на интервью разработчикам iOS приложений, а также в число топ ошибок, которые делают программисты при разработке iOS приложений. Поэтому так важно владеть этим инструментом в совершенстве.

Итак, у вас есть приложение, оно работает на main thread (главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI). Как только вы начинаете добавлять к вашему приложению такие затратные куски кода, как загрузка данных из сети или обработка изображений на main thread (главном потоке), то работа вашего пользовательского интерфейса  начнет сильно замедляться и даже может привести к полному его «замораживанию». 

Как вы можете изменить архитектуру вашего приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит сoncurrency или многопоточность , которая позволяет одновременно выполнять две или более независимые задачи (tasks): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.

Процессор в каждый заданный момент времени может выполнять один из ваших потоков (threads).
В случае одноядерного процессора, сoncurrency или многопоточность достигается многократными кратковременными переключениями между «потоками» (threads), на которых выполняются задачи (tasks), создавая достоверное представление об одновременном выполнении задач на одноядерном процессоре.  На многоядерном процессоре многопоточность достигается тем, что каждому «потоку», связанному с задачей, предоставляется свое собственное ядро для запуска. Обе эти технологии используют общее понятие многопоточности (сoncurrency).

Своеобразной платой за введение многопоточности в вашем приложениии является трудность обеспечения безопасного выполнения кода на различных потоках (thread safety). Как только мы позволяем заданиям (tasks) работать параллельно, появляются проблемы, связанные с тем, что разные задания (tasks) захотят получить доступ к одним и тем же ресурсам, например, захотят изменять одну и ту же переменную в разных потоках, или захотят получить доступ к ресурсам, которые уже заблокированы другими заданиями. Это может привести к разрушению самих ресурсов, используемых операциями на других потоках.

В iOS программировании многопоточность  предоставляется разработчикам в виде нескольких инструментов:  Thread Grand Central Dispatch (сокращенно  GCD) и Operation — и используется с целью увеличения производительности и отзывчивости пользовательского интерфейса. Мы не будем рассматривать Thread, так как это низкоуровневый механизм, а сосредоточимся на GCD и Operation (объектно-ориентированном API, построенном поверх GCD).

Читать далее