Одним из основных инструментов для работы с многопоточностью является GCD. Вроде всё понятно: при работе с GCD мы работаем с потоками не напрямую, а через очереди (queue), добавляя в них задачи (замыкания), которые выдергивается системой по принципу FIFO. Очередь может последовательная (.serial) или параллельная (.concurrent). И напоследок, задачи можно добавлять в очередь синхронно (.sync) или (.async), тут, как мне кажется, и возникают проблемы и вопросы. Блокирует ли параллельную очередь синхронное добавление задачи? Для того, чтобы получить ответ рассмотрим два примера. Для первого примера создадим свою очередь с атрибутом .concurrent и попробуем добавить последовательно две задачи синхронно. Запустим, посмотрим что выведется на экран. По тому что-то вывел нам компилятор видно, что когда мы создаем очередь, это не значит, что задачи будут выполняться на другом потоке. Мы так же остаемся на главном, только система будет брать сначала задачи с очереди с более высоким приоритетом.
Swift. Немного о понимании многопоточности при работе с GCD.
22 декабря 202122 дек 2021
106
1 мин