Использование GCD в Swift

Всем привет! Никак не могу понять принцип работы многопоточности с GCD. Я понимаю, что есть некая абстракция, названная "Потоки", в которой выполняются какие-то таски. Понимаю, что мы не управляем потоками, а управляем очередями. Что можем создавать свою очередь, можем это делегировать на GCD, используя .global(). Что main поток используется для UI и так далее. Во всех курсах рассказывают про serial и concurrent очереди, но я не понимаю при чем они здесь и вызов DispatchQueue.выбор_очереди_.async/sync.

Как здесь взаимосвязаны sync/async и serial/concurrent?


Ответы (1 шт):

Автор решения: schmidt9

Если кратко - очереди управляют наборами заданий, задавая правила их выполнения внутри очереди - последовательно (serial) или параллельно (concurrent).

Синхронность/асинхронность указывает на то, как будет выполняться этот набор относительно вызывающего потока - будет ли тот заблокирован при выполнении заданий конкретной очереди или нет.

То есть например если вы создали serial queue и выполняете задания в ней асинхронно (В виде блоков async), то эти блоки все равно будут выполнены последовательно внутри очереди, хотя и параллельно вызывающему потоку (то есть например при вызове из главного потока он не будет заблокирован).

Статья с примерами

→ Ссылка