Введение
Параллелизм является понятием многократных вещей, происходящих одновременно. С быстрым увеличением многожильного CPUs и реализацией, что число ядер в каждом процессоре только увеличится, разработчикам программного обеспечения нужны новые способы использовать в своих интересах их. Несмотря на то, что операционные системы как OS X и iOS способны к выполнению многократных программ параллельно, большинства тех программ, выполненных в фоновом режиме, и выполняют задачи, требующие небольшого непрерывного процессорного времени. Это - текущее приоритетное приложение, и привлекающее внимание пользователя и заставляющее компьютер напряженно трудиться. Если приложение имеет большую работу, чтобы сделать, но сохраняет только часть доступных ядер занятой, те дополнительные ресурсы обработки потрачены впустую.
В прошлом представление параллелизма к приложению потребовало создания одного или более дополнительных потоков. К сожалению, запись потокового кода сложна. Потоки являются низкоуровневым инструментом, которым нужно управлять вручную. Учитывая, что оптимальное число потоков для приложения может измениться динамично на основе загрузки существующей системы, и используемое оборудование, реализовывая корректное решение для поточной обработки становится чрезвычайно трудным, если не невозможный достигнуть. Кроме того, механизмы синхронизации, обычно используемые с потоками, добавляют сложность и риск для проектирования программного обеспечения без любых гарантий улучшенной производительности.
И OS X и iOS принимают более асинхронный подход к выполнению параллельных задач, чем традиционно найдено в основанных на потоке системах и приложениях. Вместо того, чтобы создавать потоки непосредственно, приложения должны только определить определенные задачи и затем позволить системе выполнить их. Позволяя системе управлять потоками, приложения получают уровень масштабируемости, не возможной с необработанными потоками. Разработчики приложений также получают более простую и более эффективную модель программирования.
Этот документ описывает метод и технологии, которые необходимо использовать для реализации параллелизма в приложениях. Технологии, описанные в этом документе, доступны и в OS X и в iOS.
Организация этого документа
Этот документ содержит следующие главы:
Параллелизм и Проектирование приложений представляют основы асинхронного проектирования приложений и технологий для выполнения Ваших пользовательских задач асинхронно.
Очереди работы показывают Вам, как инкапсулировать и выполнить задачи с помощью объектов Objective C.
Очереди отгрузки показывают Вам, как выполнить задачи одновременно в приложениях на базе С.
Источники отгрузки показывают Вам, как обработать системные события асинхронно.
Миграция Далеко от Потоков обеспечивает подсказки и методы для миграции Вашего существующего основанного на потоке кода для использования более новых технологий.
Этот документ также включает глоссарий, определяющий соответствующие условия.
Примечание о терминологии
Перед вводом в дискуссию о параллелизме необходимо определить некоторую соответствующую терминологию для предотвращения беспорядка. Разработчики, которые более знакомы с системами UNIX или более старыми технологиями OS X, могут счесть условия «задачей», «процессом» и «потоком» используемый несколько по-другому в этом документе. Этот документ использует эти термины следующим образом:
Термин поток используется для обращения к отдельному тракту выполнения для кода. Конкретная реализация для потоков в OS X основывается на потоках POSIX API.
Термин процесс используется для обращения к рабочей исполнимой программе, которая может охватить многократные потоки.
Термин задача используется для обращения к абстрактному понятию работы, которая должна быть выполнена.
Для полных определений этих и других ключевых терминов, использованных этим документом, см. Глоссарий.
См. также
Этот документ фокусируется на предпочтительных технологиях для реализации параллелизма в Ваших приложениях и не касается использования потоков. При необходимости в информации об использовании потоков и других связанных с потоком технологий см. Руководство по программированию Поточной обработки.