Вопросы по теме «Асинхронность»

Что такое асинхронность? Как вы понимаете это понятие?

Ответ

Асинхронность — это способ выполнения, при котором несколько задач могут выполняться одновременно, то есть асинхронно. Асинхронность не дает конкретики в вопросе, как именно задачи будут выполняться одновременно (на одном потоке с помощью context switching или на нескольких потоках), важна сама суть, что одна задача не ждет завершения другой, чтобы начать свое выполнение.


В противовес асинхронному выполнению задач существует синхронное. Дайте определение этому понятию.

Ответ

Синхронное выполнение задач — это такой способ организации процесса исполнения, при котором пока не будет завершена одна задача, другая не может быть начата.


Приведите пример того, когда в приложении задачи должны выполняться асинхронно

Ответ

Прекрасным примером необходимости использования асинхронности является загрузка данных с сервера во время работы приложения. Для того, чтобы UI оставался доступным, и пользователю не приходилось ждать, загрузка данных должна происходить асинхронно.


Какие элементы доступны Swift-разработчику для работы с синхронностьюасинхронностью?

Дайте их краткую характеристику.

Ответ

По-умолчанию весь код, который вы пишите, является синхронным, то есть пока не будет завершено выполнения очередного выражения, переход к следующему произведен не будет. Для внедрения асинхронности необходимо использовать один из следующих механизмов.

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

Так же стоит упомянуть:

  • URLSession — библиотека для работы с сетевыми запросами, всегда выполняет задачи асинхронно.
  • PromiseKit — сторонняя библиотека, которая позволяет внедрить асинхронное поведение.

Асинхронность и многопоточность — довольно близкие понятия, и у многих в голове они смешиваются в нечто единое, неразделимое. Но мы с вами знаем, что все не так просто, мне важно, чтобы вы понимали, в чем их разница.

Далее я попрошу вас дать несколько базовых для рассматриваемой темы определений.