Асинхронность — это способ выполнения, при котором несколько задач могут выполняться одновременно, то есть асинхронно. Асинхронность не дает конкретики в вопросе, как именно задачи будут выполняться одновременно (на одном потоке с помощью context switching или на нескольких потоках), важна сама суть, что одна задача не ждет завершения другой, чтобы начать свое выполнение.
Синхронное выполнение задач — это такой способ организации процесса исполнения, при котором пока не будет завершена одна задача, другая не может быть начата.
Прекрасным примером необходимости использования асинхронности является загрузка данных с сервера во время работы приложения. Для того, чтобы UI оставался доступным, и пользователю не приходилось ждать, загрузка данных должна происходить асинхронно.
Дайте их краткую характеристику.
По-умолчанию весь код, который вы пишите, является синхронным, то есть пока не будет завершено выполнения очередного выражения, переход к следующему произведен не будет. Для внедрения асинхронности необходимо использовать один из следующих механизмов.
Async
/await
(начиная со Swift 5.5) — это ключевые слова, благодаря которым в приложении можно внедрить нативную функциональность асинхронного выполнения задач.Continuations
(начиная со Swift 5.5) — специальный механизм, позволяющий «сопрягать» старый несинхронный код с новой системой выполнения асинхронного кода.Grand Central Dispatch
имеет функции sync
и async
(а также производные от них asyncAfter
и т.д.), которые позволяют запланировать выполнение задачи в синхронном или асинхронном режиме.BlockOperation
— класс, наследник Operation
. Позволяет запустить выполнение одного или нескольких замыканий, при этом замыкания между собой будут выполняться асинхронно, но в общем коде весь блок будет выполнен синхронно. То есть пока все замыкания не будут выполнены, дальнейший код выполняться не будет.Так же стоит упомянуть:
URLSession
— библиотека для работы с сетевыми запросами, всегда выполняет задачи асинхронно.PromiseKit
— сторонняя библиотека, которая позволяет внедрить асинхронное поведение.Асинхронность и многопоточность — довольно близкие понятия, и у многих в голове они смешиваются в нечто единое, неразделимое. Но мы с вами знаем, что все не так просто, мне важно, чтобы вы понимали, в чем их разница.
Далее я попрошу вас дать несколько базовых для рассматриваемой темы определений.