Я просмотрел множество источников, но не совсем понял разницу между использованием NSThreads
и GCD. Я совершенно новичок в платформе OS X, поэтому могу неправильно это понять.
Из того, что я читал в Интернете, кажется, что GCD делает то же самое, что и базовые потоки (POSIX, NSThreads
и т. Д.), Но при этом добавляет гораздо больше технического жаргона («блоки»). Кажется, это просто чрезмерно усложняет базовую систему создания потоков (создать поток, запустить функцию).
Что такое GCD и почему он может быть предпочтительнее традиционной многопоточности? Когда следует использовать традиционные потоки, а не GCD? И наконец, в чем причина странного синтаксиса GCD? («блоки» вместо простого вызова функций).
Я использую Mac OS X 10.6.8 Snow Leopard, и я не программирую для iOS - я программирую для Mac. Я использую Xcode 3.6.8 в Какао, создавая приложение с графическим интерфейсом.
GCD (Grand Central Dispatch): GCD предоставляет и управляет очередями FIFO, в которые ваше приложение может отправлять задачи в виде блочных объектов. Работа, отправляемая в очереди отправки, выполняется в пуле потоков, полностью управляемых системой. Не дается никаких гарантий относительно потока, в котором выполняется задача. Почему GCD поверх потоков:
Сколько работы делают ваши ядра CPU Сколько у вас ядер CPU. Сколько потоков должно быть создано. Если GCD нужен, он может войти в ядро и обмениваться информацией о ресурсах, таким образом, улучшая планирование. Меньшая нагрузка на ядро и лучшая синхронизация с ОС GCD использует существующие потоки из пула потоков вместо создания, а затем уничтожения. Наилучшее использование аппаратных ресурсов системы, позволяя операционной системе сбалансировать нагрузку всех программ, запущенных в настоящее время, с учетом таких факторов, как нагрев и срок службы батареи.
Я поделился своим опытом с потоками, операционной системой и GCD AT http://iosdose.com